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

โปรแกรมหา Substring ยาวที่สุดของ Vowels เรียงลำดับใน Python

ปัญหา

สตริง 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)

  1. Vowels Order: ['a','e','i','o','u']
  2. Two Pointers l, r สแกน String
  3. สำหรับแต่ละ Vowel ในลำดับ: ตรวจสอบว่ามีตัวนั้นปรากฏติดต่อกันที่ r หรือไม่
  4. ขยาย r ผ่าน Vowel เดียวกัน
  5. ถ้าครบ 5 Vowels → Valid, Update Max Length
  6. 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)