สมมติว่าเรามีสตริงตัวพิมพ์เล็ก ต้องการหาสตริงย่อยที่มีสระ (a, e, i, o, u) ครบทุกตัวอย่างน้อย 1 ครั้ง และไม่มีพยัญชนะในสตริงย่อยนั้น
เช่น "helloworldaeiouaieuonicestring" ผลลัพธ์คือ ['aeiou', 'aeioua', 'aeiouai', 'aeiouaiu', 'eioua', 'eiouai', 'eiouaiu']
ขั้นตอนการแก้ปัญหา
- วนลูปจุดเริ่มต้น i ทุกตำแหน่ง
- ขยาย j ไปขวา จนกว่าจะเจอพยัญชนะ
- นับสระที่เจอในแผนที่
- เมื่อครบ 5 สระ แสดงสตริงย่อยจาก i ถึง j
ตัวอย่างโค้ด Python
def isVowel(x):
return x in 'aeiou'
def get_substrings(s):
n = len(s)
for i in range(n):
seen = set()
for j in range(i, n):
if not isVowel(s[j]):
break
seen.add(s[j])
if len(seen) == 5:
print(s[i:j+1])
s = "helloworldaeiouaiunicestring"
get_substrings(s)
อินพุต
"helloworldaeiouaiunicestring"
เอาต์พุต
aeiou aeioua aeiouai aeiouaiu eioua eiouai eiouaiu