01.06 字符串压缩
标签:字符串,内存
题目其实很简单,用模拟法模拟字符串的压缩过程即可。但是我提交了三次,因为爆内存了。看了评论区才发现一个隐藏的坑:
c_s = c_s + c + to_string(cnt) // 会给c_s + c + to_string(cnt) 开辟新的内存来存放,如果字符串很长,就会爆内存
c_s += c + to_string(cnt) // 相当于在c后面append,不会开辟新的内存
所以,以后能用+= 就不要用= ...+...了吧
public:
string compressString(string S) {
if(S.size() == 0) return S;
string c_s;
char c = S[0];
short cnt = 1;
for(int i = 1; i <S.size(); i++){
if(S[i] == c)
cnt++;
else{
//不能写成c_s = c_s + c _ to_string(cnt), 会爆内存
c_s += c + to_string(cnt);
cnt = 1;
c = S[i];
}
}
c_s += c + to_string(cnt);
if(c_s.size() >= S.size()) return S;
return c_s;
}
};
网友评论