สมมติว่าเรามีสตริง 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