小白學習[leetcode]之925長按鍵入

關切得大神發表於2020-10-21

題目的連結在這裡:
https://leetcode-cn.com/problems/long-pressed-name/


題目大意

你的朋友正在使用鍵盤輸入他的名字 name。偶爾,在鍵入字元 c 時,按鍵可能會被長按,而字元可能被輸入 1 次或多次。

你將會檢查鍵盤輸入的字元 typed。如果它對應的可能是你的朋友的名字(其中一些字元可能被長按),那麼就返回 True。


一、示意圖

在這裡插入圖片描述
在這裡插入圖片描述

二、解題思路

使用Java來寫

程式碼如下:

class Solution {
    public boolean isLongPressedName(String name, String typed) {
        //按照網上的解析,用的雙指標
        int len_n=name.length();
        int len_t=typed.length();
        //先排除極端情況,如果輸入的值都比最終值要小,肯定不會
        if(len_n>len_t){
            return false;
        }
        //然後開始雙指標
        int i=0,j=0;
        while(i<len_n&&j<len_t){
            //開始指向,如果他們是一樣的話,就一起向前
            if(name.charAt(i)==typed.charAt(j)){
                i++;
                j++;
            }
            //如果出現不一樣的,但是有一種特殊情況,也就是重樣的時候比如:alex 和aaleex這樣,直接看j是不是等於前面的一個
            else if(j>0&&typed.charAt(j)==typed.charAt(j-1)){
                j++;
            }
            //其他情況下,都直接返回
            else{
                return false;
            }

        }
        //跳出迴圈還需要做一些優化
        while(j<len_t){
            if(typed.charAt(j)!=typed.charAt(j-1))
            return false;
            j++;
        }

        return i ==len_n;


    }
}

在這裡插入圖片描述

相關文章