LeetCode 2516. 每种字符至少取 K 个(滑动窗口 + 逆向思维)
原题链接
中等
作者:
autumn_0
,
2024-09-27 07:54:44
,
所有人可见
,
阅读 4
class Solution {
public int takeCharacters(String S, int k) {
char[] s = S.toCharArray();
int[] cnt = new int[3];
for(char c: s) cnt[c - 'a'] ++ ;
if(cnt[0] < k || cnt[1] < k || cnt[2] < k) return -1;
int mx = 0, left = 0;
for(int right = 0; right < s.length; right ++ ){
int c = s[right] - 'a';
cnt[c] -- ;
while(cnt[c] < k){
cnt[s[left ++ ] - 'a'] ++ ;
}
mx = Math.max(mx, right - left + 1);
}
return s.length - mx;
}
}