Welcome to Subscribe On Youtube
2379. Minimum Recolors to Get K Consecutive Black Blocks
Description
You are given a 0-indexed string blocks
of length n
, where blocks[i]
is either 'W'
or 'B'
, representing the color of the ith
block. The characters 'W'
and 'B'
denote the colors white and black, respectively.
You are also given an integer k
, which is the desired number of consecutive black blocks.
In one operation, you can recolor a white block such that it becomes a black block.
Return the minimum number of operations needed such that there is at least one occurrence of k
consecutive black blocks.
Example 1:
Input: blocks = "WBBWWBBWBW", k = 7 Output: 3 Explanation: One way to achieve 7 consecutive black blocks is to recolor the 0th, 3rd, and 4th blocks so that blocks = "BBBBBBBWBW". It can be shown that there is no way to achieve 7 consecutive black blocks in less than 3 operations. Therefore, we return 3.
Example 2:
Input: blocks = "WBWBBBW", k = 2 Output: 0 Explanation: No changes need to be made, since 2 consecutive black blocks already exist. Therefore, we return 0.
Constraints:
n == blocks.length
1 <= n <= 100
blocks[i]
is either'W'
or'B'
.1 <= k <= n
Solutions
-
class Solution { public int minimumRecolors(String blocks, int k) { int cnt = 0; for (int i = 0; i < k; ++i) { cnt += blocks.charAt(i) == 'W' ? 1 : 0; } int ans = cnt; for (int i = k; i < blocks.length(); ++i) { cnt += blocks.charAt(i) == 'W' ? 1 : 0; cnt -= blocks.charAt(i - k) == 'W' ? 1 : 0; ans = Math.min(ans, cnt); } return ans; } }
-
class Solution { public: int minimumRecolors(string blocks, int k) { int cnt = count(blocks.begin(), blocks.begin() + k, 'W'); int ans = cnt; for (int i = k; i < blocks.size(); ++i) { cnt += blocks[i] == 'W'; cnt -= blocks[i - k] == 'W'; ans = min(ans, cnt); } return ans; } };
-
class Solution: def minimumRecolors(self, blocks: str, k: int) -> int: ans = cnt = blocks[:k].count('W') for i in range(k, len(blocks)): cnt += blocks[i] == 'W' cnt -= blocks[i - k] == 'W' ans = min(ans, cnt) return ans
-
func minimumRecolors(blocks string, k int) int { cnt := strings.Count(blocks[:k], "W") ans := cnt for i := k; i < len(blocks); i++ { if blocks[i] == 'W' { cnt++ } if blocks[i-k] == 'W' { cnt-- } if ans > cnt { ans = cnt } } return ans }
-
function minimumRecolors(blocks: string, k: number): number { let cnt = 0; for (let i = 0; i < k; ++i) { cnt += blocks[i] === 'W' ? 1 : 0; } let ans = cnt; for (let i = k; i < blocks.length; ++i) { cnt += blocks[i] === 'W' ? 1 : 0; cnt -= blocks[i - k] === 'W' ? 1 : 0; ans = Math.min(ans, cnt); } return ans; }
-
class Solution { /** * @param String $blocks * @param Integer $k * @return Integer */ function minimumRecolors($blocks, $k) { $cnt = 0; for ($i = 0; $i < $k; $i++) { if ($blocks[$i] === 'W') { $cnt++; } } $min = $cnt; for ($i = $k; $i < strlen($blocks); $i++) { if ($blocks[$i] === 'W') { $cnt++; } if ($blocks[$i - $k] === 'W') { $cnt--; } $min = min($min, $cnt); } return $min; } }
-
impl Solution { pub fn minimum_recolors(blocks: String, k: i32) -> i32 { let k = k as usize; let s = blocks.as_bytes(); let n = s.len(); let mut count = 0; for i in 0..k { if s[i] == b'B' { count += 1; } } let mut ans = k - count; for i in k..n { if s[i - k] == b'B' { count -= 1; } if s[i] == b'B' { count += 1; } ans = ans.min(k - count); } ans as i32 } }