สมมติว่าเรามีสตริง s (ตัวพิมพ์เล็ก) เราต้องหาความยาวของสตริงย่อยที่ยาวที่สุดโดยที่แต่ละสระเกิดขึ้นเป็นจำนวนเท่ากัน
ดังนั้น หากอินพุตเป็น s ="anewcoffeepot" ผลลัพธ์จะเป็น 10 เนื่องจากสตริงย่อย "wcoffeepot" มีสระสองตัว "o" และ "e" ซึ่งเกิดขึ้นสองครั้ง
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
สระ :=แผนที่กำหนดสระและค่าตัวเลขเป็น {a:0, e:1, i:2, o:3, u:4}
-
คำนำหน้า :=แผนที่ว่างและใส่คู่คีย์-ค่า (0, −1) เข้าไป
-
หน้ากาก :=0, n :=ขนาดของ s, res :=0
-
สำหรับผมอยู่ในช่วง 0 ถึง n ทำ
-
ถ้า s[i] เป็นสระแล้ว
-
หน้ากาก :=หน้ากาก XOR (2^สระ[s[i]])
-
-
หากหน้ากากไม่มีคำนำหน้า
-
คำนำหน้า[หน้ากาก] :=ฉัน
-
-
มิฉะนั้น
-
res :=สูงสุดของ res และ (i − prefix[mask])
-
-
-
ผลตอบแทน
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def solve(self, s): vowels = {"a": 0, "e": 1, "i": 2, "o": 3, "u": 4} prefix = {0: −1} mask = 0 n = len(s) res = 0 for i in range(n): if s[i] in vowels: mask ^= 1 << vowels[s[i]] if mask not in prefix: prefix[mask] = i else: res = max(res, i − prefix[mask]) return res ob = Solution() s = "anewcoffeepot" print(ob.solve(s))
อินพุต
"anewcoffeepot"
ผลลัพธ์
10