设计一种方法,通过给重复字符计数来进行基本的字符串压缩。
例如,字符串 aabcccccaaa
可压缩为 a2b1c5a3
。而如果压缩后的字符数不小于原始的字符数,则返回原始的字符串。
可以假设字符串仅包括a-z的字母。
样例
str=aabcccccaaa
返回 a2b1c5a3
str=aabbcc
返回 aabbcc
str=aaaa
返回 a4
解题思路:
那么双指针就是不二之选啦。既然双指针,其中一个指针指向重复字符串的第一个,然后另一个指针向后遍历并计数,就能得到重复的个数,参见代码如下:
public class Solution {
/**
* @param originalString: a string
* @return: a compressed string
*/
public String compress(String originalString) {
// write your code here
if(originalString == null)
return null;
char[] strs = originalString.toCharArray();
StringBuilder sb = new StringBuilder();
//使得strs[l...r]区域为重复字符
int l=0, r=0;
while(r < strs.length){
while(r+1<strs.length && strs[r+1] == strs[l])
r++;
sb.append(strs[l]);//重复字符
sb.append(r-l+1);//其次数
r++;
l=r;
}
if(sb.length() >= strs.length)
return originalString;
return sb.toString();
}
}