假设我们有一个二进制字符串s。如果我们最多可以交换字符串中的一对字符,则必须找到最长连续子字符串1s的结果长度。
因此,如果输入类似于s =“ 1111011111”,则输出将为9,因为我们可以交换s [4]和s [9]以获得9个连续的1。
为了解决这个问题,我们将遵循以下步骤-
l:= 0,cnt:= 0,ans:= 0
对于范围0到s大小的r,执行
cnt:= cnt-(当s [l]与“ 0”相同时为1,否则为0)
l:= l + 1
cnt:= cnt +(当s [r]与“ 0”相同时为1,否则为0)
如果cnt> 1,则
ans:= ans和(r-l + 1)的最大值
返回ans的最小值,并在s中出现1
让我们看下面的实现以更好地理解-
class Solution: def solve(self, s): l = 0 cnt = 0 ans = 0 for r in range(len(s)): cnt += s[r] == "0" if cnt > 1: cnt -= s[l] == "0" l += 1 ans = max(ans, r - l + 1) return min(ans, s.count("1")) ob = Solution()s = "1111011111" print(ob.solve(s))
"1111011111"
输出结果
9