leetcode 链接:字符串压缩

题目

利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串 aabcccccaaa 会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。

示例:

  1. 输入:"aabcccccaaa"
  2. 输出:"a2b1c5a3
  3. 输入:"abbccd"
  4. 输出:"abbccd"
  5. 解释:"abbccd"压缩后为"a1b2c2d1",比原字符串长度更长。

解答 & 代码

  • 设定一个新的字符串 newS 存储压缩后的字符串,初始设为 ""
  • 遍历字符串 S,如果当前遍历到的字符和上一个字符不同 or 遍历完字符串,则将上一个字符及其出现的次数添加到 newS 的末尾

    class Solution {
    public:
      string compressString(string S) {
          if(S.size() <= 1)
              return S;
    
          string newS = "";
          char pre = S[0];
          int cnt = 1;
          for(int i = 1; i < S.size(); ++i)
          {
              if(S[i] != pre)
              {
                  newS.push_back(pre);
                  newS.append(to_string(cnt));
    
                  pre = S[i];
                  cnt = 1;
              }
              else
                  ++cnt;
          }
          newS.push_back(pre);
          newS.append(to_string(cnt));
    
          if(newS.size() >= S.size())
              return S;
          else
              return newS;
      }
    };
    

    执行结果: ``` 执行结果:通过

执行用时:12 ms, 在所有 C++ 提交中击败了 40.28% 的用户 内存消耗:7.2 MB, 在所有 C++ 提交中击败了 68.06% 的用户 ```