
这道题中等难度,一开始没看到要修改原数组,以为只要返回个长度即可,在原空间修改,很自然的想到用双指针(读写指针),一个处理在读的数据位置,一个处理该写入的数据位置,代码如下:
    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