題目描述
難度簡單
字符串壓縮。利用字符重複出現的次數,編寫一種方法,實現基本的字符串壓縮功能。比如,字符串aabcccccaaa會變爲a2b1c5a3。若“壓縮”後的字符串沒有變短,則返回原先的字符串。你可以假設字符串中只包含大小寫英文字母(a至z)。
示例1:
輸入:"aabcccccaaa"
輸出:"a2b1c5a3"
示例2:
輸入:"abbccd"
輸出:"abbccd"
解釋:"abbccd"壓縮後爲"a1b2c2d1",比原字符串長度更長。
提示:字符串長度在[0, 50000]範圍內。
思路——模擬
聲明一個比較字符cmp。當新字符與cmp相等時,計數加一;否則,將cmp字符與當前總數sum輸出到result字符串中。
輸出sum時要注意多位數,直接用to_string轉換成字符串。
還有一個注意的地方是最終需要比較壓縮後的字符串與原字符串的長度,如何未變短就輸出原字符串。
- 時間複雜度:O(n)
- 空間複雜度:O(1)
class Solution {
public:
string compressString(string S) {
if(!S.length()) return S;
string res;
int sum=1;
char cmp = S[0];
for(int i=1;i<S.length();i++)
{
if(cmp == S[i])//重複 計數累加
sum++;
else
{
//不重複 輸出字符與個數
res += cmp + to_string(sum);
//重置比較字符
cmp = S[i];
sum=1;
}
}
//輸出最後一個字符
res += cmp + to_string(sum);
if (res.length() >= S.length())//若壓縮後反而變長,輸出原來的字符串
return S;
else
return res;
}
};