[LeetCode-面试01.06]字符串压缩

一.题目:

字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)

示例1:
输入:”aabcccccaaa”
输出:”a2b1c5a3”

示例2:
输入:”abbccd”
输出:”abbccd”
解释:”abbccd”压缩后为”a1b2c2d1”,比原字符串长度更长。

二.题解:

1.第一种方法:双指针法

在这里插入图片描述

(1)解题思路:
  • 新建两个指针i,j
  • 新建一个StringBuilder sb
  • 利用while循环,i为下表=标,从0开始遍历字符串S
  • 令j=i;
  • 判定字符串的第j的元素是否与第i个元素是否相等
  • 若相等,则j指向下一位
  • 否则将S的第i个元素添加到sb中
  • 再将j-i 即重复字符的个数添加到sb中,
  • 再将i指针指向j,进行下一个循环
  • 循环结束后,将sb转换为String类型的字符串result
  • 比较result和S的长度,返回较短的字符串
  • 结束
(2)代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/**
* 解法一 双指针法
* 新建两个指针i,j
* 新建一个StringBuilder sb
* 利用while循环,i为下表=标,从0开始遍历字符串S
* 令j=i;
* 判定字符串的第j的元素是否与第i个元素是否相等
* 若相等,则j指向下一位
* 否则将S的第i个元素添加到sb中
* 再将j-i 即重复字符的个数添加到sb中,
* 再将i指针指向j,进行下一个循环
* 循环结束后,将sb转换为String类型的字符串result
* 比较result和S的长度,返回较短的字符串
* 结束
*/
public static String compressString(String S){
int j;
int i=0;
int N = S.length();
StringBuilder sb = new StringBuilder();

while(i<N){
j=i;
while(j<N && S.charAt(i)==S.charAt(j)){
j++;
}

sb.append(S.charAt(i));
sb.append(j-i);
i=j;
}

String result = sb.toString();

if(result.length()<S.length()){
return result;
}else {
return S;
}
}
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2021 Movle
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信