题目
给你一个长度为 n 下标从 0 开始的字符串 blocks ,blocks[i] 要么是 ‘W’ 要么是 ‘B’ ,表示第 i 块的颜色。字符 ‘W’ 和 ‘B’ 分别表示白色和黑色。
给你一个整数 k ,表示想要 连续 黑色块的数目。
每一次操作中,你可以选择一个白色块将它 涂成 黑色块。
请你返回至少出现 一次 连续 k 个黑色块的 最少 操作次数。
解题分析
设置两个左右指针,形成一个滑框,每一次滑动只需要判断最后一个和上一次的第一个是不是黑色即可。
代码
class Solution {
public:
int minimumRecolors(string blocks, int k) {
int n=blocks.size();
int left=0;
int right=k-1;
int black=0;
int res=0;
for(int i=left;i<k;i++){
if(blocks[i]=='B'){
black++;
res++;
}
}
while(right<n-1){
if(blocks[left]=='B')
black--;
left++;
right++;
if(blocks[right]=='B'){
black++;
}
res=max(res,black);
}
return k-res;
}
};