这道题中等难度,一开始没看到要修改原数组,以为只要返回个长度即可,在原空间修改,很自然的想到用双指针(读写指针),一个处理在读的数据位置,一个处理该写入的数据位置,代码如下:
int compress(vector<char>& chars) {
int len = chars.size();
// 用来表示用到的原空间数组的下标
int index = 1;
// 用来表示重复出现字符的次数
int temp=1;
for(int i=1;i<len;i++){
if(chars[i]==chars[i-1]){
temp++;
}else{
if(temp!=1){
string num = to_string(temp);
for(int j=0;j<num.size();j++){
chars[index++]=num[j];
}
}
temp=1;
chars[index++]=chars[i];
}
}
if(temp!=1){
string num = to_string(temp);
for(int j=0;j<num.size();j++){
chars[index++]=num[j];
}
}
chars.resize(index);
return index;
}
代码写的有点冗长,懒得优化了。
原文:https://www.cnblogs.com/Beyond-189/p/15169989.html