LeetCode 443 压缩字符串

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;

    }

};