LeetCode 443 压缩字符串
🟠 中等偏上 https://leetcode.cn/problems/string-compression/description/
一个指针 slow 为写入位置,一个指针为遍历位置。
while是递归形式。递归函数语义为:写一个 a 2。
class Solution {
public:
int compress(vector<char>& chars) {
int n = chars.size();
if(n==1) return 1;
int fast = 0; //遍历
int slow = 0; //向slow下一个写入数字
while(true){
if(fast>=n){
break;
}
chars[slow] = chars[fast];
int count = 1;
while(fast+1<n&&chars[fast] == chars[fast+1]){
fast++;
count++;
}
// cout<<slow<<fast<<count<<endl;
if(count==1){
fast++;
slow++;
}else{
slow++;
if(count>=10){
string s = to_string(count);
for(auto& val:s){
chars[slow++] = val;
}
}else{
chars[slow] = count+'0';
slow++;
}
fast++;
}
}
return slow-1-0+1;
}
};