目录
题目:
示例:
分析:
题目:
示例:
分析:
给一个字符串,如果该字符有连续的相同的字符,则只保留一个字符,并在该字符后加上该字符连续的数量.例如原数组为 ['a','a','a'],则因为字符'a'连续了三次,因此可以压缩为['a','3'],我们需要注意的是数字也需要是字符,则如果字符连续次数不止有一位,例如有连续十个'a',则需要压缩为['a','1','0'].
我们可以遍历整个字符串,并且记录连续的重复字符是什么,以及连续的长度,若是连续长度仅为1(没有重复)则不需要修改,否则需要将多余字符删去,再添上重复的数量(改为字符).
我的做法是在遍历的过程中就把多余的字符删掉,然后在碰到不重复的字符时,在第一个重复字符后面加上数量.
完整代码+结果如下:
class Solution {
public:
//用于插入连续重复字符的数量
int Insert(int index,vector<char>& chars,int SUM){
vector<int>temp;
while(SUM){
temp.push_back(SUM%10);
SUM/=10;
}
for(int t:temp){
chars.insert(chars.begin()+index,t+48);
}
return temp.size();
}
int compress(vector<char>& chars) {
char cur=chars[0];
int SUM=0,index=0;
while(index<chars.size()){
if(chars[index]==cur){ //如果遇到了相同的字符,即有连续的重复字符,可以压缩.
SUM++;
if(SUM>1){
chars.erase(chars.begin()+index);
index--; //由于删除了原数组,因此为了保持index的指向不变,需要将index-1.
}
index++;
}else{ //
cur=chars[index];
if(SUM<=1){
index++;
continue;
}
index+=Insert(index,chars,SUM); //修改元素组,将压缩字符的数字添加进原数组中,同时要改变index避免指向数字
SUM=0;
}
}
if(SUM>1) Insert(index,chars,SUM);
return chars.size();
}
};