Java

得到 K 个黑块的最少涂色次数

内容纲要

给你一个长度为 n下标从 0开始的字符串blocks,blocks[i]要么是'W'要么是'B',表示第i块的颜色。字符'W' 和'B'分别表示白色和黑色。

给你一个整数k,表示想要连续黑色块的数目。 每一次操作中,你可以选择一个白色块将它 涂成黑色块。 请你返回至少出现 一次连续 k个黑色块的 最少操作次数。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimum-recolors-to-get-k-consecutive-black-blocks
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


输入:blocks = "WBBWWBBWBW", k = 7
输出:3
解释:
一种得到 7 个连续黑色块的方法是把第 0 ,3 和 4 个块涂成黑色。
得到 blocks = "BBBBBBBWBW" 。
可以证明无法用少于 3 次操作得到 7 个连续的黑块。
所以我们返回 3 。
输入:blocks = "WBWBBBW", k = 2
输出:0
解释:
不需要任何操作,因为已经有 2 个连续的黑块。
所以我们返回 0 。

提示

  • n == blocks.length
  • 1 <= n <= 100
  • blocks[i] 要么是 'W' ,要么是 'B' 。
  • 1 <= k <= n

/**

 *
 * @author Li JiaWei
 * @version TODO
 * @date 2023/3/9
 * @since on
 */
public class MinimumRecolors_2379 {

  public static int minimumRecolors(String blocks, int k) {
    // 这个是一个滑动窗口问题,
    // 返回一个k 少操作次数的
    int a = 0, b = 0, c = 0;
    while (a < k) {
      // 前几个次数
      c += blocks.charAt(a) == 'W' ? 1 : 0;
      a++;
    }
    int as = c;
    while (a < blocks.length()) {
      // 右
      c += blocks.charAt(a) == 'W' ? 1 : 0;
      //左
      c -= blocks.charAt(b) == 'W' ? 1 : 0;
      b++;
      a++;
      as = Math.min(as, c);
    }
    return as;
  }

  public static void main(String[] args) {
    var a = "WBBWWBBWBW";

    System.out.println(minimumRecolors(a, 7));
  }
}

马上对线!

Title - Artist
0:00