字符串压缩

根据字符重复次数压缩字符串

问题

实现字符串压缩功能,将连续重复的字符替换为”字符+出现次数”的形式。例如 aabcccccaaa 压缩为 a2b1c5a3

解答

function compressString(str) {
  let compressed = '';
  let count = 1;

  for (let i = 0; i < str.length; i++) {
    if (str[i] === str[i + 1]) {
      // 如果当前字符与下一个字符相同,增加计数器
      count++;
    } else {
      // 否则,将当前字符及其计数器追加到结果中
      compressed += str[i] + count;
      count = 1; // 重置计数器
    }
  }

  // 返回较短的字符串(原始字符串或压缩后的字符串)
  return compressed.length < str.length ? compressed : str;
}

// 示例用法
console.log(compressString('aabcccccaaa')); // 输出 "a2b1c5a3"
console.log(compressString('abcdefg')); // 输出 "abcdefg" (未发生压缩)

关键点

  • 遍历字符串时比较当前字符与下一个字符是否相同
  • 使用计数器累计连续相同字符的数量
  • 当字符变化时,将字符和计数拼接到结果中并重置计数器
  • 比较压缩后和原始字符串长度,返回较短的那个