สมมติว่าเรามีสตริง s ที่มีสระภาษาอังกฤษเท่านั้น เราต้องหาความยาวของสตริงย่อยที่ยาวที่สุดที่สวยงามของ s หากเราหาสตริงย่อยดังกล่าวไม่พบ ให้คืนค่า 0 สตริงจะเรียกว่าสวยงามหากเป็นไปตามเงื่อนไขต่อไปนี้ -
-
สระทั้ง 5 ตัวต้องปรากฏอย่างน้อยหนึ่งครั้งในสระ
-
ตัวอักษรต้องเรียงตามลำดับตัวอักษร
ดังนั้น หากอินพุตเป็น s ="aaioaaaaeiiouuooauauu" ผลลัพธ์จะเป็น 10 เพราะสตริงย่อยคือ "aaaaeiiouu" ซึ่งสวยงาม
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
สระ :=รายการสระทั้งหมด ['a', 'e', 'i', 'o', 'u']
-
l :=0, r :=0, ยาวที่สุด :=0
-
ในขณะที่ l <ขนาดของ s ทำ
-
ถูกต้อง :=จริง
-
สำหรับแต่ละสระในสระ ทำ
-
valid :=valid is true และ (r
-
ในขณะที่ r <ขนาดของ s และ s[r] เหมือนกับสระ ให้ทำ
-
r :=r + 1
-
-
-
ถ้าถูกต้องเป็นจริงแล้ว
-
ยาวที่สุด :=สูงสุดของยาวที่สุดและ (r - l)
-
-
l :=r
-
-
กลับมานานที่สุด
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
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))
อินพุต
"aaioaaaaeiiouuooaauu"
ผลลัพธ์
10