Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมค้นหาจำนวน 1 วินาทีที่ยาวที่สุดหลังจากสลับบิตหนึ่งคู่ใน Python


สมมติว่าเรามีสตริงไบนารี s หากเราสามารถสลับอักขระได้ไม่เกินหนึ่งคู่ในสตริง เราต้องหาความยาวที่เป็นผลลัพธ์ของสตริงย่อยที่ยาวที่สุดของ 1 วินาที

ดังนั้น หากอินพุตเป็น s ="1111011111" เอาต์พุตจะเป็น 9 เนื่องจากเราสามารถสลับ s[4] และ s[9] เพื่อให้ได้ 9 1 วินาทีติดต่อกัน

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • l :=0, cnt :=0, ans :=0
  • สำหรับ r ในช่วง 0 ถึงขนาดของ s ทำ
    • cnt :=cnt + (1 เมื่อ s[r] เหมือนกับ "0" มิฉะนั้น 0)
    • ถ้า cnt> 1 แล้ว
      • cnt :=cnt - (1 เมื่อ s[l] เหมือนกับ "0" มิฉะนั้น 0)
      • l :=l + 1
    • ans :=สูงสุดของ ans และ (r - l + 1)
  • คืนค่าขั้นต่ำของ ans และการเกิดขึ้นของ 1 ใน s

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

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