压缩字符串
给定一组字符,使用原地算法将其压缩。
压缩后的长度必须始终小于或等于原数组长度。
数组的每个元素应该是长度为1 的字符(不是 int 整数类型)。
在完成原地修改输入数组后,返回数组的新长度。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/string-compression
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路采用双指针,一个表示读,一个表示写。
class Solution {
public:
int compress(vector<char>& chars) {
int res = 0;
if (chars.size() < 2) {
return chars.size();
}
// 试试双指针
int fast = 1; // 读
int slow = 0; // 写
while (fast < chars.size()) {
int cnt = 1;
while (fast < chars.size() && chars[fast] == chars[fast - 1]) {
fast++;
cnt++;
}
if ( cnt == 1) {
// 更新锚点
chars[++slow] = chars[fast++];
// fast++;
// slow++;
continue;
}
string numS = to_string(cnt);
// for test
// cout << numS << endl;
for (auto s : numS) {
chars[++slow] = s;
}
if (fast == chars.size()) {
// chars[++slow] = chars[fast - 1];
break;
}
chars[++slow] = chars[fast++];
// for test
// cout << "slow" << slow << endl;
}
// for test
// cout << slow<<endl;
++slow;
return slow;
}
};