Welcome to Subscribe On Youtube
Formatted question description: https://leetcode.ca/all/2379.html
2379. Minimum Recolors to Get K Consecutive Black Blocks
- Difficulty: Easy.
- Related Topics: String, Sliding Window.
- Similar Questions: Max Consecutive Ones III, Maximum Points You Can Obtain from Cards, Maximum Number of Vowels in a Substring of Given Length.
Problem
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
Solution (Java, C++, Python)
-
class Solution { public int minimumRecolors(String blocks, int k) { int n = blocks.length(); int ans; int i; int cur = 0; for (i = 0; i < k; i++) { if (blocks.charAt(i) == 'W') { cur++; } } ans = cur; for (i = k; i < n; i++) { if (blocks.charAt(i) == 'W') { cur++; } if (blocks.charAt(i - k) == 'W') { cur--; } ans = Math.min(ans, cur); } return ans; } } ############ 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: def minimumRecolors(self, blocks: str, k: int) -> int: cnt = blocks[:k].count('W') ans = cnt i, n = k, len(blocks) while i < n: cnt += blocks[i] == 'W' cnt -= blocks[i - k] == 'W' ans = min(ans, cnt) i += 1 return ans ############ # 2379. Minimum Recolors to Get K Consecutive Black Blocks # https://leetcode.com/problems/minimum-recolors-to-get-k-consecutive-black-blocks/ class Solution: def minimumRecolors(self, blocks: str, k: int) -> int: n = len(blocks) b = 0 res = inf for i, x in enumerate(blocks): if i >= k: if blocks[i - k] == "B": b -= 1 if x == "B": b += 1 if i + 1 >= k: res = min(res, k - b) return res
-
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; } };
-
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; }
-
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 } }
-
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; } }
Explain:
nope.
Complexity:
- Time complexity : O(n).
- Space complexity : O(n).