Python程式:查詢二進位制字串中最多翻轉一個0後最長連續1子字串的長度
假設我們有一個二進位制字串 s。我們最多允許將一個“0”翻轉為“1”,我們需要找到最長連續1子字串的長度。
因此,如果輸入類似於 s = "1010110001",則輸出將為 4,因為如果我們將索引 3 處的零翻轉,則得到字串 "1011110001",這裡最長連續1子字串的長度為 4。
為了解決這個問題,我們將遵循以下步驟:
- n := s 的大小
- ans := 0,ones := 0,left := 0,right := 0
- 當 right < n 時,執行以下操作:
- 如果 s[right] 等於 "1",則:
- ones := ones + 1
- 當 right - left + 1 - ones > 1 時,執行以下操作:
- remove := s[left]
- 如果 remove 等於 "1",則:
- ones := ones - 1
- left := left + 1
- ans := ans 和 (right - left + 1) 中的最大值
- right := right + 1
- 如果 s[right] 等於 "1",則:
- 返回 ans
示例
讓我們看看以下實現以獲得更好的理解:
def solve(s): n = len(s) ans = ones = left = right = 0 while right < n: if s[right] == "1": ones += 1 while right - left + 1 - ones > 1: remove = s[left] if remove == "1": ones -= 1 left += 1 ans = max(ans, right - left + 1) right += 1 return ans s = "1010110001" print(solve(s))
輸入
"1010110001"
輸出
4
廣告