面試題01.06.:字符串壓縮(C++)


題目地址:https://leetcode-cn.com/problems/compress-string-lcci/

題目描述

字符串壓縮。利用字符重復出現的次數,編寫一種方法,實現基本的字符串壓縮功能。比如,字符串aabcccccaaa會變為a2b1c5a3。若“壓縮”后的字符串沒有變短,則返回原先的字符串。你可以假設字符串中只包含大小寫英文字母(a至z)

題目示例

示例1:

輸入:"aabcccccaaa"
輸出:"a2b1c5a3"


示例2:

輸入:"abbccd"
輸出:"abbccd"
解釋:"abbccd"壓縮后為"a1b2c2d1",比原字符串長度更長。
提示:字符串長度在[0, 50000]范圍內。

解題思路

思路1:分析題目可知,字符串壓縮即將連續出現的相同字符按照 “字符 + 出現次數 ”壓縮。

約束條件是如果壓縮后的字符串長度變短,則返回壓縮后的字符串,否則保留原來的字符串。

具體步驟如下:

  • 使用字符c記錄當前要壓縮的字符,變量cnt記錄字符c出現的次數
  • 利用for循環枚舉字符串S中的字符,若當前枚舉到的字符S[i]==c,則計數器cnt加1,否則,按照字符串壓縮方式“字符 + 出現次數 ”輸出,並更新當前要壓縮的字符c和計數器cnt
  • 遍歷結束之后,按照題目要求將壓縮后的字符res長度與原串長度進行比較,若其長度沒有變短,即大於等於原字符串S的長度,則返回原字符串S,否則返回壓縮后的字符串res。

思路2:雙指針大法

我們使用雙指針i和j,其中指針j向前移動,指針i用於標記相同字符出現的最后一個元素的下一個。

 

圖源(https://leetcode-cn.com/problems/compress-string-lcci/solution/shuang-zhi-zhen-fa-qu-lian-xu-zi-fu-cpython-by-net/

程序源碼

思路1

class Solution {
public:
    string compressString(string S) {
        if(S.size() < 1) return S;
        int cnt = 1;
        string res;
        char c = S[0];
        for(int i = 1; i < S.size(); i++)
        {
            if(c == S[i])
            {
                cnt++;
            }
            else
            {
                res += c + to_string(cnt);
                c = S[i];
                cnt = 1;
            }
        }
        res += c + to_string(cnt);
        return res.length() >= S.length()? S: res;
    }
};

 思路2:

class Solution {
public:
    string compressString(string S) {
        if(S.size() == 0) return S;
        string res;
        int i = 0;
        while(i < S.size())
        {
            int j = i;
            while(j < S.size() && S[j] == S[i]) 
            {
                j++;
            }
            res += S[i];
            res += to_string(j - i);
            i = j;
        }
        return res.size() >= S.size() ? S: res;
    }
};

參考文章

https://leetcode-cn.com/problems/compress-string-lcci/solution/shuang-zhi-zhen-fa-qu-lian-xu-zi-fu-cpython-by-net/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM