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

หาสตริงย่อยที่มีสระครบทุกตัวและไม่มีพยัญชนะใน Python

สมมติว่าเรามีสตริงตัวพิมพ์เล็ก ต้องการหาสตริงย่อยที่มีสระ (a, e, i, o, u) ครบทุกตัวอย่างน้อย 1 ครั้ง และไม่มีพยัญชนะในสตริงย่อยนั้น

เช่น "helloworldaeiouaieuonicestring" ผลลัพธ์คือ ['aeiou', 'aeioua', 'aeiouai', 'aeiouaiu', 'eioua', 'eiouai', 'eiouaiu']

ขั้นตอนการแก้ปัญหา

  1. วนลูปจุดเริ่มต้น i ทุกตำแหน่ง
  2. ขยาย j ไปขวา จนกว่าจะเจอพยัญชนะ
  3. นับสระที่เจอในแผนที่
  4. เมื่อครบ 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