LeetCode 925 長鍵按入

2021-10-02 12:19:45 字數 1751 閱讀 9241

題目描述:你的朋友正在使用鍵盤輸入他的名字 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 的字元都是小寫字母。

將兩個字串按塊化為最簡模式,如 "aabccc" 改為 "abc" ,同時記錄各個字母出現次數:[2,1,3]。

比較化簡後的兩個字串,若不相等則原來的 name 和 typed 一定不匹配

若相等,則比較各個字母出現的次數,若 name 字串的某個字母次數比 typed 的多,則不匹配。如:"aab" 與 "ab",前者 『a』 出現兩次,後者出現一次,不匹配。

在這裡我自己定義了乙個類用來存放 簡化的 string 以及字母的出現次數。

class solution 

}private group groupity(string s)

}return new group(key.tostring(),value);

}public boolean islongpressedname(string name, string typed)

for(int i = 0;i < g1.value.size();i++)

return true;

}}

雙指標遍歷兩個字串,迴圈的退出條件是將 name 字串遍歷完,沒有說明 typed 字串的情況,需要內部分別判斷。

若當前字母相同,則 i 和 j 同時向前移動乙個。當 j = typed.length() 但是 i < name.length(),說明 typed 字串遍歷結束但 name 還有字母,則不匹配。

若 typed 的字母和 name 的前乙個相同,那麼這個字母就是多按的,則找到下乙個和name 的前乙個不同的字母。當 j 加到 typed.length() 但還沒有找到符合條件的字母,說明不匹配。

否則就是不匹配,直接返回 false

class solution 

int i = 1,j = 1;

while(i < name.length())

}else if(typed.charat(j) == name.charat(i-1))

}}else

}return true;

}}

2020 10 21 925 長鍵按入

925.長按鍵入 難度簡單143 你的朋友正在使用鍵盤輸入他的名字name。偶爾,在鍵入字元c時,按鍵可能會被長按,而字元可能被輸入 1 次或多次。你將會檢查鍵盤輸入的字元typed。如果它對應的可能是你的朋友的名字 其中一些字元可能被長按 那麼就返回true。示例 1 輸入 name alex t...

LeetCode925 長按鍵入

你的朋友正在使用鍵盤輸入他的名字 name。偶爾,在鍵入字元 c 時,按鍵可能會被長按,而字元可能被輸入 1 次或多次。你將會檢查鍵盤輸入的字元 typed。如果它對應的可能是你的朋友的名字 其中一些字元可能被長按 那麼就返回 true。示例 1 輸入 name alex typed aaleex ...

LeetCode 925 長按鍵入

你的朋友正在使用鍵盤輸入他的名字 name。偶爾,在鍵入字元 c 時,按鍵可能會被長按,而字元可能被輸入 1 次或多次。你將會檢查鍵盤輸入的字元 typed。如果它對應的可能是你的朋友的名字 其中一些字元可能被長按 那麼就返回 true。示例 1 輸入 name alex typed aaleex ...