你的朋友正在使用鍵盤輸入他的名字 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
解釋:長按名字中的字元并不是必要的。
solution:
public boolean isLongPressedName(String name, String typed) {
// 首字母不相等
if(typed.charAt(0) != name.charAt(0)){
return false;
}
int i = 0, j = 0;
while(j < typed.length()){
// 相等的情況
if (i < name.length() && typed.charAt(j) == name.charAt(i)) {
i++;
j++;
}
// i == name.length()和不相等的情況 處理方式相同
else if (typed.charAt(j) == typed.charAt(j - 1)) {
j++;
} else {
return false;
}
}
// 保證name被周遊完,這裡很重要
return i == name.length();
}
執行結果:
執行用時:1 ms, 在所有 Java 送出中擊敗了86.83%的使用者
記憶體消耗:36.6 MB, 在所有 Java 送出中擊敗了74.09%的使用者