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

โปรแกรมค้นหาความยาวของสตริงย่อยที่ยาวที่สุดซึ่งมีสององค์ประกอบที่แตกต่างกันในPython


สมมติว่าเรามีสตริง s เราต้องหาความยาวของสตริงย่อยที่ยาวที่สุดที่มีอักขระต่างกันไม่เกิน 2 ตัว

ดังนั้น หากอินพุตเป็นเหมือน s ="xyzzy" ผลลัพธ์จะเป็น 4 เนื่องจาก "yzzy" เป็นสตริงย่อยที่ยาวที่สุดโดยมีอักขระไม่ซ้ำกันไม่เกิน 2 ตัว

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

  • เริ่ม :=0

  • c :=แผนที่

  • ตอบ :=0

  • สำหรับการสิ้นสุดในช่วง 0 ถึงขนาดของ s ทำ

    • c[s[end]] :=c[s[end]] + 1

    • ในขณะที่ขนาด c> 2 ทำ

      • c[s[start]] :=c[s[start]] - 1


      • ถ้า c[s[start]] เป็น 0 แล้ว

        • ลบ c[s[start]]

      • start :=start + 1

    • ans :=สูงสุดของ ans และ (สิ้นสุด - เริ่ม + 1)

  • กลับมาอีกครั้ง

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

ตัวอย่าง

class Solution:
   def solve(self, s):
      from collections import Counter
      start = 0
      c = Counter()
      ans = 0
      for end in range(len(s)):
         c[s[end]] += 1
         while len(c) > 2:
            c[s[start]] -= 1
            if not c[s[start]]:
               del c[s[start]]
            start += 1
         ans = max(ans, end - start + 1)
      return ans
ob = Solution()
s = "xyzzy"
print(ob.solve(s))

อินพุต

s = "xyzzy"

ผลลัพธ์

4