字符串壓縮。利用字符重複出現的次數,編寫一種方法,實現基本的字符串壓縮功能。比如,字符串aabcccccaaa會變爲a2b1c5a3。若“壓縮”後的字符串沒有變短,則返回原先的字符串。你可以假設字符串中只包含大小寫英文字母(a至z)。
示例1:
輸入:“aabcccccaaa”
輸出:“a2b1c5a3”
示例2:
輸入:“abbccd”
輸出:“abbccd”
解釋:“abbccd"壓縮後爲"a1b2c2d1”,比原字符串長度更長。
提示:
字符串長度在[0, 50000]範圍內。
來源:力扣(LeetCode)
C++
class Solution {
public:
string compressString(string S) {
//transform(S.begin(), S.end(), S.begin(), ::tolower);
int s = S.size();
//小於等於1肯定直接返回原串
if(s<=1){
return S;
}
char c = S[0];
//當前字符有幾個
int num = 1;
//初始化字符串爲第一個字符
string res(1,c);
for(int i=1;i<s;i++){
if(S[i]!=c){
//ostringstream os_;
//os_ << num;
//res.append(os_.str());
res.append(to_string(num));
//res.append(1,S[i]);
res.push_back(S[i]);
c = S[i];
num = 0;
}
num++;
}
//最後一個字符有幾個
if(num!=0){
//ostringstream os_;
//os_ << num;
//res.append(os_.str());
res.append(to_string(num));
}
//此處是大於等於,不是等於,注意
if(res.size() >= s){
return S;
}
return res;
}
};