天天看點

LeetCode每日一題925:長按鍵入

你的朋友正在使用鍵盤輸入他的名字 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%的使用者