LeetCode 1234 替换子串得到平衡字符串

LeetCode 1234 替换子串得到平衡字符串

🟡 中等 https://leetcode.cn/problems/replace-the-substring-for-balanced-string/description/

首先分析问题,从中间切一刀如果左边的各个值均小于等于 n/4,那么右边一定可以调整到平衡状态,反之不然。那右边一定必须到头码?不是的,右边可以提前结束,应该是除了选中的窗口内的字符,其他的字符计数都小于n/4就一定可以调整窗口内的字符得到平衡。

这里初始 count假设是大数,因此while始终维护小数,答案是小数的情况,因此在while里面更新。

class Solution {

public:

    int balancedString(string s) {

        int total_len = s.size();

        int single_len = total_len / 4;

        unordered_map<char, int> count;

        for(int i = 0;i<total_len;i++){

            count[s[i]]++;

        }

        if(count['Q']<=single_len&&count['W']<=single_len&&count['E']<=single_len&&count['R']<=single_len){

            return 0;

        }

        int left = 0;

        int res = total_len;

        for(int i = 0;i<total_len;i++){

            count[s[i]]--;
			
            while(count['Q']<=single_len&&count['W']<=single_len&&count['E']<=single_len&&count['R']<=single_len){

                res = min(res,i-left+1);

                count[s[left]]++;

                left++;

            }

        }

        return res;

    }

};