Minimum Recolors to Get K Consecutive Black Blocks

We need to track the consecutive black blocks and find the minimum number of white blocks to be recolored within a window of size k to achieve the desired k consecutive black blocks.

Here’s the code:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution:
    def minimumRecolors(self, blocks: str, k: int) -> int:
        # Start by finding the number of black blocks in the first window of size k
        black_count = sum(1 for i in range(k) if blocks[i] == 'B')

        # Calculate the initial number of operations needed by subtracting the black count from k
        min_operations = k - black_count

        # Iterate through the blocks starting from k, maintaining a window of size k
        for i in range(k, len(blocks)):
            # If the block exiting the window was black, decrement the black count
            if blocks[i - k] == 'B':
                black_count -= 1

            # If the block entering the window is black, increment the black count
            if blocks[i] == 'B':
                black_count += 1

            # Calculate the number of operations needed for the current window
            operations_needed = k - black_count

            # Update the minimum number of operations if the current operations needed is smaller
            if operations_needed < min_operations:
                min_operations = operations_needed

        # Return the minimum number of operations
        return min_operations

Explanation

  • We maintain a window of size k, initially starting from the first k blocks.
  • Inside the window, we track the consecutive black blocks, and we calculate the number of white blocks that need to be recolored to achieve k consecutive black blocks.
  • As we iterate through the blocks, we update the black count for the sliding window and keep track of the minimum operations needed.
  • Finally, we return the minimum number of operations required to achieve the desired k consecutive black blocks.