uacs2024

导航

leetcode 2516. 每种字符至少取 K 个

2516. 每种字符至少取 K 个

逆向思维:滑动窗口内的字符a最多个数为(原字符串a的个数 - k),b和c同理。求出这个滑动窗口最长长度res,结果返回size-res

class Solution {
public:
    int takeCharacters(string s, int k) {
        int size = s.size(),res = 0;
        int letterCount[3]{};
        for(char &letter : s)  ++letterCount[letter-'a'];
        if(letterCount[0] < k || letterCount[1] < k || letterCount[2] < k)  return -1;
        for(int left = 0,right = 0,nowCount[3]{};right < size;++right){
            ++nowCount[s[right]-'a'];
            while(nowCount[s[right]-'a'] > letterCount[s[right]-'a'] - k){
                --nowCount[s[left++]-'a'];
            }
            res = max(res,right-left+1);
        }
        return size - res;
    }
};

 

posted on 2024-12-12 15:36  ᶜʸᵃⁿ  阅读(16)  评论(0)    收藏  举报