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;
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值