题目:
给你一个长度为 n
下标从 0 开始的字符串 blocks
,blocks[i]
要么是 'W'
要么是 'B'
,表示第 i
块的颜色。字符 'W'
和 'B'
分别表示白色和黑色。
给你一个整数 k
,表示想要 连续 黑色块的数目。
每一次操作中,你可以选择一个白色块将它 涂成 黑色块。
请你返回至少出现 一次 连续 k
个黑色块的 最少 操作次数。
思路:定长滑动窗口 入 更新 出
代码:
java
class Solution {
public int minimumRecolors(String blocks, int k) {
int n = blocks.length();
char[] block = blocks.toCharArray();
int ans = 0;
int num = 0;
for (int i = 0; i < n; i++) {
if (block[i] == 'B')
num++;
if (i < k - 1)
continue;
ans = Math.max(ans, num);
if (block[i - k + 1] == 'B')
num--;
}
return k - ans;
}
}
性能:
时间复杂度o(n)
空间复杂度o(1)