📜  门|门 IT 2005 |第 34 题(1)

📅  最后修改于: 2023-12-03 15:28:47.932000             🧑  作者: Mango

题目描述

给定一个只包含小写字母的字符串,将其压缩,使得同一字母连续出现的个数在压缩后的字符串中只出现一次。

例如,字符串aabcccccaaa压缩后变为a2b1c5a3。

如果压缩后的字符串没有变短,则返回原先的字符串。

函数签名

/**
 * @param {string} str
 * @return {string}
 */
function compress(str) {}

示例

输入:"aabcccccaaa"

输出:"a2b1c5a3"

输入:"abcd"

输出:"abcd"

解题思路

首先,通过遍历字符串计算出每个字符连续出现的次数,然后将它们存储在一个新的字符串中。最后判断新的字符串长度是否小于原字符串长度,如果小于,则返回新的字符串,否则返回原字符串。

代码实现

function compress(str) {
  let res = '';
  let count = 1;

  for (let i = 0; i < str.length; i++) {
    if (str[i] === str[i + 1]) {
      count++;
    } else {
      res += str[i] + count;
      count = 1;
    }
  }

  return res.length < str.length ? res : str;
}

测试用例

console.log(compress('aabcccccaaa')); // a2b1c5a3
console.log(compress('abcd')); // abcd