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