タイトル
列圧縮。基本的な文字列の圧縮を達成するための方法で書かれた定期的な文字の数を、使用します。例えば、文字列aabcccccaaaはa2b1c5a3になります。文字列は短くない「圧縮」した場合、元の文字列が返されます。あなたは、文字列のみ小文字(a〜z)のが含まれているとことがあります。
例1:
入力: "aabcccccaaa"
出力: "a2b1c5a3"
例2:
入力:「abbccd」
出力:「abbccdは」
説明:「abbccd」「a1b2c2d1」として圧縮、文字列の長さが長く、元を超えています。
ヒント:
範囲内の文字列の長さ[0、50000]。
思考
ダブルポインタのアイデア、要素への最初の左ポインタ、要素の右側にある最初の要素の最初から右ポインタ、および結果の文字列に追加異なる要素の意味における最初のポインタ要素を、見つけるために、左に、そして左ポインタ更新右ポインタのため。(JI)をTO_STRINGなお、文字列を連結する場合ANS = ANS +文字列(1、S [I])+(JI)をTO_STRINGメモリ制限を超えて、読み取ることANS + =文字列(1、S [I])+それはしていません。その理由は、ANS = ANS + strは+ strが開かれたANS結果を格納した後、ANSに割り当てるための新しいスペースになりながら、ANS + = strは、コールans.append(STR)、ANS後の接続文字列に等しいことです - - 私の弟の視野領域からのコメント。コードは以下の通りであります:
class Solution {
public:
string compressString(string S) {
if(S.size()<=2)
return S;
int i=0;
string ans;
while(i<S.size()){
int j=i+1;
while(j<S.size()&&S[j]==S[i])
j++;
ans+=string(1,S[i])+to_string(j-i);
i=j++;
}
if(ans.size()>=S.size())
return S;
return ans;
}
};