📌  相关文章
📜  使二进制字符串的所有字符都等于0需要重复翻转的子字符串的最大长度(1)

📅  最后修改于: 2023-12-03 15:36:25.876000             🧑  作者: Mango

使二进制字符串的所有字符都等于0需要重复翻转的子字符串的最大长度

问题描述:

给定一个二进制字符串,我们可以通过将一个或多个连续的 1 翻转为 0 来使字符串中的所有字符都等于 '0'。

请计算在转换字符的任意次数后,使字符串中的所有字符均为 '0' 的最大长度。

解题思路:

对于这道问题,我们可以使用滑动窗口的思想解决。

我们用 left 和 right 定义一个滑动窗口,该窗口中的连续1的个数不大于 k。

每当我们发现窗口的连续 1 的个数大于 k 时,我们可以将 left 指向下一个位置开始新的窗口。

在每个窗口中,我们可以将右端点 right 不断向右移动,指导不能将 1 翻转为 0 为止。

每次我们改变 right 时,我们需要更新最大值 max_length。

最后返回 max_length 即可。

代码实现:
def longestSubstring(s: str, k: int) -> int:
    n = len(s)
    left = right = 0
    max_length = 0
    zero_count = 0
    while right < n:
        if s[right] == "0":
            zero_count += 1
        if zero_count > k:
            if s[left] == "0":
                zero_count -= 1
            left += 1
        max_length = max(max_length, right - left + 1)
        right += 1
    return max_length
复杂度分析:

时间复杂度:O(n),其中 n 是二进制字符串的长度。我们最多遍历二进制字符串两次。

空间复杂度:O(1),因为我们使用了常数个变量。

参考链接:

LeetCode 题目链接