ปัญหา
สตริง s ประกอบด้วย Vowels เท่านั้น หา Substring "Beautiful" ยาวที่สุด: 1) มี Vowels ครบ 5 ตัว (a,e,i,o,u) 2) เรียงตามลำดับอักษร (a...e...i...o...u) คืนความยาว
ตัวอย่าง
s = "aaioaaaaeiiouuooaauu" → Output: 10
Substring: "aaaaeiiouu" (a×4, e×1, i×2, o×1, u×2)
อัลกอริทึม (Two Pointers + State Machine)
- Vowels Order: ['a','e','i','o','u']
- Two Pointers l, r สแกน String
- สำหรับแต่ละ Vowel ในลำดับ: ตรวจสอบว่ามีตัวนั้นปรากฏติดต่อกันที่ r หรือไม่
- ขยาย r ผ่าน Vowel เดียวกัน
- ถ้าครบ 5 Vowels → Valid, Update Max Length
- l = r (เริ่ม Chunk ใหม่)
ตัวอย่างโค้ด
def solve(s):
vowels = ['a', 'e', 'i', 'o', 'u']
l, r, longest = 0, 0, 0
while l < len(s):
valid = True
for vowel in vowels:
valid &= (r < len(s) and s[r] == vowel)
while r < len(s) and s[r] == vowel:
r += 1
if valid:
longest = max(longest, r - l)
l = r
return longest
s = "aaioaaaaeiiouuooaauu"
print(solve(s)) # 10
ความซับซ้อน
- Time: O(n) - แต่ละ Char ถูก Visit 1 ครั้ง
- Space: O(1)