LeetCode443. 压缩字符串

//443. 压缩字符串
/* 
 * 使用双指针,i:指向赋值的地方、j:指向遍历的位置
 * 使用j遍历数组,同时计数
 * 每次遇到与上一个字符不同的地方,就在i的地方开始赋值
 * 为了方便处理,可以在原数组的最后加一个数组中不可能出现的字符,这样不用特判最后位置
 * 最后返回i就行
 */
class Solution {
public:
  int compress(vector<char>& chars) {
    chars.emplace_back(0);
    int n = chars.size();
    if (n == 1) return 0;
    int i = 0;
    int cnt = 0;
    for (int j = 1; j < n; j++) {
      if (chars[j] == chars[j - 1]) cnt++;
      else {
        chars[i++] = chars[j - 1];
        if (cnt) {
          deque<char>dp;
          cnt++;
          while (cnt) {
            dp.push_front(cnt % 10 + '0');
            cnt /= 10;
          }
          for (auto x : dp) 
            chars[i++] = x;
          cnt = 0;
        }
      }
    }
    return i;
  }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值