在Python中查找二进制字符串中进行一次0翻转后最长的连续1子字符串的长度

在Python中查找二进制字符串中进行一次0翻转后最长的连续1子字符串的长度

假设我们有一个二进制字符串 s。我们允许将最多一个“0”翻转为“1”,我们必须找到最长的连续1子字符串的长度。

因此,如果输入为s =“1010110001”,则输出将为4,因为如果我们翻转索引3处存在的零,则得到字符串“1011110001”,这里最长的1子字符串的长度为4。

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

  • n:= s的大小
  • ans:= 0,ones:= 0,left:= 0,right:= 0
  • while right < n,do
    • if s[right] 与“1”相同,则
      • ones:= ones + 1
    • while right – left + 1 – ones > 1,do
      • remove:= s[left]
      • if remove 与“1”相同,则
      • ones:= ones – 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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程