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

ตรวจสอบว่าสตริงเป็นชื่อที่พิมพ์ผิดจากชื่อที่กำหนดหรือไม่ใน Python


สมมติว่าเรามีสตริงพิมพ์เล็กสองตัว s และ t บางครั้งเมื่อเราพิมพ์สระ คีย์อาจถูกกดนานเกินไป ทำให้สระซ้ำ 1 ครั้งหรือมากกว่า เราต้องตรวจสอบว่าทเป็นไปได้ที่ t จะเป็นสตริงที่พิมพ์แทน s หรือไม่

เช่น ถ้าอินพุตเป็น s = "mine", t = "miiine" ผลลัพธ์จะเป็น True เนื่องจากสระ 'i' ซ้ำ 3 ครั้ง ตัวอักษรอื่นๆ ปกติ

ในการแก้ปัญหานี้ เราจะทำตามขั้นตอนดังนี้:

  • s_len := ขนาดของ s
  • t_len := ขนาดของ t
  • j := 0
  • สำหรับ i ในช่วง 0 ถึง s_len - 1 ทำ
    • ถ้า s[i] ไม่เท่ากับ t[j] แล้ว
      • คืนค่า False
    • ถ้า s[i] ไม่ใช่สระ แล้ว
      • j := j + 1
      • ไปรอบต่อไป
    • cnt_1 := 1
    • while i < s_len - 1 และ s[i] เท่ากับ s[i + 1] ทำ
      • cnt_1 := cnt_1 + 1
      • i := i + 1
    • cnt_2 := 1
    • while j < t_len - 1 และ t[j] เท่ากับ s[i] ทำ
      • cnt_2 := cnt_2 + 1
      • j := j + 1
    • ถ้า cnt_1 > cnt_2 แล้ว
      • คืนค่า False
  • คืนค่า True

ลองดูการนำไปใช้ดังต่อไปนี้เพื่อเข้าใจได้ดียิ่งขึ้น:

ตัวอย่าง

def isVowel(c):
    vowel = "aeiou"
    return c in vowel

def solve(s, t):
    s_len = len(s)
    t_len = len(t)
    j = 0
    for i in range(s_len):
        if s[i] != t[j]:
            return False
        if isVowel(s[i]) == False:
            j = j + 1
            continue
        cnt_1 = 1
        while i < s_len - 1 and (s[i] == s[i + 1]):
            cnt_1 = cnt_1 + 1
            i = i + 1
        cnt_2 = 1
        while j < t_len - 1 and t[j] == s[i]:
            cnt_2 = cnt_2 + 1
            j = j + 1
        if cnt_1 > cnt_2:
            return False
    return True

s = "mine"
t = "miiine"
print(solve(s, t))

อินพุต

"mine", "miiine"

ผลลัพธ์

True