在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
- if 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