给你一个长度为
n
下标从 0 开始的字符串blocks
,blocks[i]
要么是'W'
要么是'B'
,表示第i
块的颜色。字符'W'
和'B'
分别表示白色和黑色。给你一个整数
k
,表示想要 连续 黑色块的数目。每一次操作中,你可以选择一个白色块将它 涂成 黑色块。
请你返回至少出现 一次 连续
k
个黑色块的 最少 操作次数。
思路:
使用一个长度为kkk的滑动窗口,记录滑动窗口中白色块的数量,即为该滑动窗口中获得连续kkk个黑色块的操作数,枚举所有的滑动窗口,记录最少操作次数,返回即可
实现
class Solution {public int minimumRecolors(String blocks, int k) {int n = blocks.length();int count = 0;for (int i = 0; i < k; i++){if (blocks.charAt(i) == 'W'){count++;}}int min = count;for (int j = 0; j < n - k; j++){if (blocks.charAt(j) == 'W'){count--;}if (blocks.charAt(j + k) == 'W'){count++;}min = Math.min(count, min);}return min;}
}