1. 题目
2. 思路(快慢指针)
- i为慢指针,j为快指针
- 如果前后字符相同就一直移动快指针并对相同字符数量进行计数,直到相邻字符不同时按题目要求进行字母与个数的拼接,此时要将慢指针i的位置移动到下一次计数序列的首部,直到整个字符串都遍历完成
- 最后还要比较一下res和原始字符串S的长度,将长度最短的字符串返回
3. 代码实现
/**
* @param {string} S
* @return {string}
*/
var compressString = function(S) {
const n = S.length
if (n < 2) return S
let res = '', i = 0
while (i < n) {
let j = i + 1, cnt = 1
while (j < n) {
if (S[i] === S[j]) {
cnt++
j++
} else {
break
}
}
// console.log(cnt);
res += S[i] + cnt
i += j - i // 将i移动到下一个连续序列的首部
}
return res.length >= n ? S : res
};