用 Python 编写程序,在交换一对位后找出最长的 1 数

pythonserver side programmingprogramming

假设我们有一个二进制字符串 s。如果我们最多可以交换字符串中的一对字符,那么我们必须找到最长的连续 1 子字符串的结果长度。

因此,如果输入为 s = "1111011111",则输出将为 9,因为我们可以交换 s[4] 和 s[9] 以获得 9 个连续的 1。

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

  • l := 0, cnt := 0, ans := 0
  • 对于 r 在 0 到 s 的大小范围内,执行
    • cnt := cnt + (当 s[r] 与 "0" 相同时为 1,否则为 0)
    • 如果 cnt > 1,则
      • cnt := cnt - (当 s[l] 与"0"相同时为 1,否则为 0)
      • l := l + 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

相关文章


有用资源