Cho hai chuỗi s (chuỗi gõ thực tế) và t (chuỗi mục tiêu). Một số phím bị kẹt có thể làm ký tự xuất hiện 1 hoặc nhiều lần. Kiểm tra s có thể là kết quả gõ t với phím kẹt không.
Ví dụ: s="appppleee", t="apple" → True.
Giải thuật (Hai con trỏ)
i, jduyệts, t;t_lastlưu ký tự cuối khớp củat- Khi
: tăng cả hai, cập nhậtt_last - Khi
: chỉ tăngi(ký tự lặp do phím kẹt) - Khác →
False - Cuối: phần còn lại của
sphải toànt_last
Ví dụ triển khai
def solve(s, t):
i = j = 0
s_len, t_len = len(s), 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(ch == t_last for ch in s[i:])
return True
print(solve("appppleee", "apple"))
Đầu vào
"appppleee", "apple"
Đầu ra
True