题目来源:
leetcode题目,网址:面试题 01.06. 字符串压缩 - 力扣(LeetCode)
解题思路:
计算压缩后的字符串长度,如果该长度小于原字符串长度,返回压缩后的字符串,否则返回原字符串。
解题代码:
- class Solution {
- public:
- string compressString(string S) {
- string com="";
- char pre=S[0];
- int cnt=1;
- for(int i=1;i<S.length();i++){
- if(S[i]!=pre){
- com+=pre+to_string(cnt);
- pre=S[i];
- cnt=1;
- }else{
- cnt++;
- }
- }
- com+=pre+to_string(cnt);
- return com.length()<S.length()?com:S;
- }
- };
总结:
在字符串拼接时,若代码为 com=com+pre+to_string(cnt); 会报超出内存的错误,而使用 com+= pre+to_string(cnt); 时,则不会。这里可能是因为 += 是在 com 字符串的后面直接添加,而
com=com+pre+to_string(cnt); 会新建变量保存 com+pre+to_string(cnt) 的结果,再赋值给 com ,从而导致超出内存限制。
官方题解也是直接模拟。