題目描述:你的朋友正在使用鍵盤輸入他的名字 name。偶爾,在鍵入字元 c 時,按鍵可能會被長按,而字元可能被輸入 1 次或多次。你將會檢查鍵盤輸入的字元 typed。如果它對應的可能是你的朋友的名字(其中一些字元可能被長按),那麼就返回 true。
示例 1:
輸入:name = "alex", typed = "aaleex"示例 2:輸出:true
解釋:'alex' 中的 'a' 和 'e' 被長按。
輸入:name = "saeed", typed = "ssaaedd"示例 3:輸出:false
解釋:'e' 一定需要被鍵入兩次,但在 typed 的輸出中不是這樣。
輸入:name = "leelee", typed = "lleeelee"示例 4:輸出:true
輸入:name = "laiden", typed = "laiden"name.length <= 1000輸出:true
解釋:長按名字中的字元並不是必要的。
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 ...