Python 中一个程序,在一次 0 翻转后,找出二进制字符串中最长的 1 子串的长度

pythonserver side programmingprogramming更新于 2026/1/23 8:12:17

假设我们有一个二进制字符串 s。我们最多可以翻转一个"0"到"1",我们必须找到最长连续 1 子串的长度。

因此,如果输入为 s = "1010110001",则输出将为 4,就好像我们翻转索引 3 处的零一样,然后我们得到字符串"1011110001",这里 1 的最长子串的长度为 4。

为了解决这个问题,我们将遵循以下步骤 −

  • n := s 的大小
  • ans := 0, ones := 0, left := 0, right := 0
  • while right < n,执行
    • 如果 s[right] 与"1"相同,则
      • ones := those + 1
    • 当 right - left + 1 - those > 1 时,执行
      • remove := s[left]
      • 如果 remove 与"1"相同,则
        • ones := those - 1
      • left := left + 1
    • ans := ans 和 (right - left + 1) 的最大值
    • right := 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

相关文章


有用资源