你的朋友正在使用鍵盤輸入他的名字 name。偶爾,在鍵入字元 c 時,按鍵可能會被長按,而字元可能被輸入 1 次或多次。
你將會檢查鍵盤輸入的字元 typed。如果它對應的可能是你的朋友的名字(其中一些字元可能被長按),那麼就返回 true。
示例 1:
輸入:name = 「alex」, typed = 「aaleex」
輸出:true
解釋:『alex』 中的 『a』 和 『e』 被長按。
示例 2:
輸入:name = 「saeed」, typed = 「ssaaedd」
輸出:false
解釋:『e』 一定需要被鍵入兩次,但在 typed 的輸出中不是這樣。
示例 3:
輸入:name = 「leelee」, typed = 「lleeelee」
輸出:true
示例 4:
輸入:name = 「laiden」, typed = 「laiden」
輸出:true
解釋:長按名字中的字元並不是必要的。
name.length <= 1000
typed.length <= 1000
name 和 typed 的字元都是小寫字母。
用雙指標進行遍歷,從name和typed的第乙個字母開始判斷,當遇到不一樣的字母時,判斷typed中是否為長按(和name的前乙個字母是否相同),應注意對於尾部邊界的處理。
class
solution
:def
islongpressedname
(self, name:
str, typed:
str)
->
bool
: i, j =0,
0#雙指標
while j <
len(typed)
:#相應位置字母相同時:
if i <
len(name)
and name[i]
== typed[j]
: i +=
1 j +=
1#相應位置字母不同時,比較是否為長按輸入:
elif j >
0and typed[j]
== typed[j -1]
: j +=
1#不相同也不是長按時:
else
:return
false
#驗證name是否判斷完整
return i ==
len(name)
主要的問題就是對 i 和 j 的移動位置要考慮清楚,在最後要注意是否已經匹配完成,剛開始就是因為對 j 的考慮不完善一直沒能通過,之後借鑑了題解裡的思路才完成。。。 LeetCode925 長按鍵入
你的朋友正在使用鍵盤輸入他的名字 name。偶爾,在鍵入字元 c 時,按鍵可能會被長按,而字元可能被輸入 1 次或多次。你將會檢查鍵盤輸入的字元 typed。如果它對應的可能是你的朋友的名字 其中一些字元可能被長按 那麼就返回 true。示例 1 輸入 name alex typed aaleex ...
LeetCode 925 長按鍵入
你的朋友正在使用鍵盤輸入他的名字 name。偶爾,在鍵入字元 c 時,按鍵可能會被長按,而字元可能被輸入 1 次或多次。你將會檢查鍵盤輸入的字元 typed。如果它對應的可能是你的朋友的名字 其中一些字元可能被長按 那麼就返回 true。示例 1 輸入 name alex typed aaleex ...
LeetCode 925 長按鍵入
你的朋友正在使用鍵盤輸入他的名字 name。偶爾,在鍵入字元 c 時,按鍵可能會被長按,而字元可能被輸入 1 次或多次。你將會檢查鍵盤輸入的字元 typed。如果它對應的可能是你的朋友的名字 其中一些字元可能被長按 那麼就返回 true。示例 1 輸入 name alex typed aaleex ...