Leetcode每日刷题之面试题01.06字符串压缩(C++)
1.题目解析
本题的目的是遍历一个字符串,将重复的字符串以该字符+出现次数进行压缩,最终返回压缩后的字符串即可
题目来源:面试题01.06.字符串压缩
2.算法原理
我们从左往右遍历字符串,用 ch 记录当前要压缩的字符,cnt 记录 ch 出现的次数,如果当前枚举到的字符 s[i] 等于 ch ,我们就更新 cnt 的计数,即 cnt = cnt + 1,否则我们按题目要求将 ch 以及 cnt 更新到答案字符串 ans 里,即 ans = ans + ch + cnt,完成对 ch 字符的压缩
随后更新 ch 为 s[i],cnt 为 1,表示将压缩的字符更改为 s[i]
在遍历结束之后,我们就得到了压缩后的字符串 ans,并将其长度与原串长度进行比较。如果长度没有变短,则返回原串,否则返回压缩后的字符串
3.代码展示
class Solution {
public:string compressString(string S) {if ((int)S.length() == 0) return S; // 空串处理string ans = "";int cnt = 1;char ch = S[0];for (int i = 1; i < (int)S.length(); ++i){if (ch == S[i]) cnt++;else{ans += ch + to_string(cnt); // 注意 cnt 要转为字符串ch = S[i];cnt = 1;}}ans += ch + to_string(cnt);return ans.length() >= S.length() ? S : ans;}
};