面试题 01.06. 字符串压缩

image.png

迭代压缩

  1. public class Solution {
  2. public String compressString(String S) {
  3. // 如果是空串,直接返回
  4. if (S.length() == 0) return S;
  5. // 将字符串拆分为字符数组
  6. char[] charArray = S.toCharArray();
  7. // 用于记录连续重复字符个数
  8. int charCount = 1;
  9. // 用于记录上一个字符,初使化为第一个字符,遍历的时候从第二个字符开始
  10. char preChar = S.charAt(0);
  11. // 用于记录拼接结果
  12. StringBuilder stringBuilder = new StringBuilder();
  13. // 从第二个字符开始遍历
  14. for (int i = 1; i < charArray.length; i++) {
  15. // 如果当前字符与上一个字符相同,count ++;
  16. if (preChar == charArray[i]) {
  17. charCount ++;
  18. } else {
  19. // 如果当前字符与上一个字符不相同,则进行拼接
  20. stringBuilder.append(preChar).append(charCount);
  21. // count 重置为 1
  22. charCount = 1;
  23. }
  24. // 每次遍历的最后都要将 preChar 更新为当前字符
  25. preChar = charArray[i];
  26. }
  27. // 注意不要忘了拼接最后一位
  28. stringBuilder.append(preChar).append(charCount);
  29. // 判断拼接后长度与原字符长度,返回长度小的
  30. return stringBuilder.length() < S.length() ? stringBuilder.toString() : S;
  31. }
  32. }