题目来源:https://leetcode-cn.com/problems/compress-string-lcci/
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。
自己写的双百分之百:(值得注意的是使用字符数组要比使用字符串的内部方法charAt()要快很多,
用字符串内部封装的方法时几乎是使用字符数组的三倍 9ms vs 3ms)
public String compressString(String S) {
if (S.length() == 0){
return "";
}
char[] array = S.toCharArray();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < array.length; i++) {
sb.append(array[i]);
int count = 1;
while (i + 1 < array.length && array[i + 1] == array[i]){
i++;
count++;
}
sb.append(count);
}
if (sb.length() >= array.length){
return S;
}
return sb.toString();
}
public String compressString(String S) {
if (S.length() == 0){
return "";
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < S.length(); i++) {
sb.append(S.charAt(i));
int count = 1;
while (i + 1 < S.length() && S.charAt(i) == S.charAt(i + 1)){
i++;
count++;
}
sb.append(count);
}
if (sb.length() >= S.length()){
return S;
}
return sb.toString();
}