迭代压缩
public class Solution {
public String compressString(String S) {
// 如果是空串,直接返回
if (S.length() == 0) return S;
// 将字符串拆分为字符数组
char[] charArray = S.toCharArray();
// 用于记录连续重复字符个数
int charCount = 1;
// 用于记录上一个字符,初使化为第一个字符,遍历的时候从第二个字符开始
char preChar = S.charAt(0);
// 用于记录拼接结果
StringBuilder stringBuilder = new StringBuilder();
// 从第二个字符开始遍历
for (int i = 1; i < charArray.length; i++) {
// 如果当前字符与上一个字符相同,count ++;
if (preChar == charArray[i]) {
charCount ++;
} else {
// 如果当前字符与上一个字符不相同,则进行拼接
stringBuilder.append(preChar).append(charCount);
// count 重置为 1
charCount = 1;
}
// 每次遍历的最后都要将 preChar 更新为当前字符
preChar = charArray[i];
}
// 注意不要忘了拼接最后一位
stringBuilder.append(preChar).append(charCount);
// 判断拼接后长度与原字符长度,返回长度小的
return stringBuilder.length() < S.length() ? stringBuilder.toString() : S;
}
}