程序在Python中交换一对位后查找最长的1

假设我们有一个二进制字符串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
    猜你喜欢