สมมติว่าเรามีสตริงพิมพ์เล็กสองตัว 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
- ถ้า s[i] ไม่เท่ากับ t[j] แล้ว
- คืนค่า 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