สมมติว่าเรามีสตริงสองตัว s และ t เราต้องการสร้าง t แต่คีย์บอร์ดมีปัญหาบางตัวอักษรติด จึงอาจพิมพ์ซ้ำ 1 ครั้งหรือมากกว่า เราต้องตรวจสอบว่า s ที่พิมพ์ออกมาอาจเป็นการตั้งใจเขียน t หรือไม่
เช่น ถ้าอินพุตคือ s = "appppleee", t = "apple" ผลลัพธ์จะเป็น True
ขั้นตอนการแก้ปัญหา
i := 0, j := 0s_len := ขนาดของ s,t_len := ขนาดของ tt_last := สตริงว่าง- ในขณะที่
j < t_len:- ถ้า
i == s_lenคืนค่าFalse - ถ้า
s[i] == t[j]:t_last := t[j]i := i + 1,j := j + 1
- มิฉะนั้นถ้า
s[i] == t_last:i := i + 1
- มิฉะนั้น คืนค่า
False
- ถ้า
- ถ้า
i < s_lenคืนค่าTrueถ้าตัวอักษรทุกตัวในs[i:]เท่ากับt_last - มิฉะนั้น คืนค่า
True
ตัวอย่างการใช้งาน
def solve(s, t):
i = j = 0
s_len = len(s)
t_len = len(t)
t_last = ""
while j < t_len:
if i == s_len:
return False
if s[i] == t[j]:
t_last = t[j]
i += 1
j += 1
elif s[i] == t_last:
i += 1
else:
return False
if i < s_len:
return all(char == t_last for char in s[i:])
else:
return True
s = "appppleee"
t = "apple"
print(solve(s, t))
อินพุต
"appppleee", "apple"
เอาต์พุต
True