√
给定一组字符,使用原地算法将其压缩。
压缩后的长度必须始终小于或等于原数组长度。
数组的每个元素应该是长度为1 的字符(不是 int 整数类型)。
在完成原地修改输入数组后,返回数组的新长度。
进阶:
你能否仅使用O(1) 空间解决问题?
class Solution {
public:
int compress(vector<char>& chars) {
int n = chars.size();
int cur = 0;
for(int i = 0, j = 0; i < n; j = i) {
while(i < n && chars[i] == chars[j]) {
i++;
}
chars[cur++] = chars[j];
if(i - j == 1) {
continue;
}
string s = to_string(i - j);
for(int t = 0; t < s.size(); t++) {
chars[cur++] = s[t];
}
}
return cur;
}
};