[Leetcode解題] 1888. Minimum Number of Flips to Make the Binary String Alternating

7 March 2026
medium sliding_window

1888. Minimum Number of Flips to Make the Binary String Alternating

題目

1888. Minimum Number of Flips to Make the Binary String Alternating

解題思路

這題我們可以使用slideing window來解,在長度為偶數為狀況,其實只有兩種狀況010101..1010101..,不需要考慮Type-1的狀況,所以就可以直接算Type-2的數量即可。

但是如果是長度為奇數的情況,Type-1的使用會大大影響Type-2可能的數目,所以我們想考慮使用不同的Type-1算出來的Type-2的數目,並且取最小值。

這可以透過複製一次字串,再作sliding window即可。

Python 實作

class Solution:
    def minFlips(self, s: str) -> int:
        n = len(s)

        if n % 2 == 1:
            s = s + s
        alt1, alt2 = "", ""

        for i in range(len(s)):
            alt1 += "0" if i % 2 == 0 else "1"
            alt2 += "1" if i % 2 == 0 else "0"
        
        res = len(s)
        diff1, diff2 = 0, 0
        l = 0
        for r in range(len(s)):
            if s[r] != alt1[r]:
                diff1 += 1
            if s[r] != alt2[r]:
                diff2 += 1
            
            # 當窗口大小超過 n,左端縮小
            if (r - l + 1) > n:
                if s[l] != alt1[l]:
                    diff1 -= 1
                if s[l] != alt2[l]:
                    diff2 -= 1
                l += 1
            
            # 當窗口剛好為 n,紀錄最小值
            if (r - l + 1) == n:
                res = min(res, diff1, diff2)
                
        return res

時間複雜度

$O(n)$