//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;
}
};
LeetCode443. 压缩字符串
最新推荐文章于 2024-11-02 20:41:42 发布