トピックは単純ですが、記録する必要があります
件名:https : //leetcode-cn.com/problems/compress-string-lcci/
class Solution {
public:
string compressString(string S) {
int len=S.length();
if (len==0) return S;
string res="";
char c=S[0];
int cnt=1;
for (int i=1;i<len;i++)
if (S[i]==c){
cnt++;
}
else{
res+=c+to_string(cnt);
cnt=1;
c=S[i];
}
res+=c+to_string(cnt);
if (res.length()<len) return res;
else return S;
}
};
ここにポイントがあります、私がメモリ制限を超えたエラーがあった最初の2つの提出
その理由は、res + = c + to_string(cnt);をres = res + c + to_string(cnt);と書いたためです。
ここでは自分で説明しますが、「=」の右側の計算結果は一時スペースにあるため、正しいかどうかわかりません。そのため、右側に大きな計算結果を直接置くと、この一時スペースを超える場合があります。したがって、「+ =」を使用します
ただし、加算などを使用すると問題が発生します。つまり、文字列 "+"演算子の左右のオペランドの1つは文字列型でなければなりませんが、文字を追加することはできません(char型の文字しか使用できません)。
https://blog.csdn.net/liuchuo/article/details/51994235と私に思い出させるためのコメントに感謝します。