压缩字符串II
null备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/string-compression/description/
给你一个字符数组 chars
,请使用下述算法压缩:
从一个空字符串 s
开始。对于 chars
中的每组 连续重复字符 :
- 如果这一组长度为
1
,则将字符追加到s
中。 - 否则,需要向
s
追加字符,后跟这一组的长度。
压缩后得到的字符串 s
不应该直接返回 ,需要转储到字符数组 chars
中。需要注意的是,如果组长度为 10
或 10
以上,则在 chars
数组中会被拆分为多个字符。
请在 修改完输入数组后 ,返回该数组的新长度。
你必须设计并实现一个只使用常量额外空间的算法来解决此问题。
示例 1:
输入:chars = ["a","a","b","b","c","c","c"] 输出:返回 6 ,输入数组的前 6 个字符应该是:["a","2","b","2","c","3"] 解释:"aa" 被 "a2" 替代。"bb" 被 "b2" 替代。"ccc" 被 "c3" 替代。
// 重点思路:
// 用一个count 来进行不断的清空
// 然后 用 j 来统计与前面的比较是否相同,然后循环
#include "iostream"
#include<bits/stdc++.h>
using namespace std;
class Solution {
public:
int compress(vector<char>& chars) {
for(int i = 0 , j = 0; i < chars.size() && j < chars.size();){
int count = 0;
while(j < chars.size() && chars[j] == chars[i]){
j++;
count++;
}
if(count > 1) {
ans += chars[i] + to_string(count);
i = j;
}
else {
ans += chars[i];
i++;
}
}
for(int i = 0 ; i < ans.size() ; i++){
chars[i] = ans[i];
}
return ans.size();
}
private:
string ans;
};
int main() {
vector<char> chars = {'a','a','b','b','c','c','c'};
Solution s2;
cout<<s2.compress(chars)<<endl;
return 0;
}