JAVA 之 每日一記 之 演算法 ( 長按鍵入 )
阿新 • • 發佈:2020-10-21
題目詳解:
你的朋友正在使用鍵盤輸入他的名字name。偶爾,在鍵入字元c時,按鍵可能會被長按,而字元可能被輸入 1 次或多次。
你將會檢查鍵盤輸入的字元typed。如果它對應的可能是你的朋友的名字(其中一些字元可能被長按),那麼就返回True。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/long-pressed-name
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
示例 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
的字元都是小寫字母。
思路:
建立 雙向性指標,分別用於指向 name 和 typed 的下標,然後利用 while 迴圈 攔截 typed 的長度,
判斷 name 的 i 指標 和 typed 的 j 指標 的 字母相同,i 和 j 指標都 +1
如果 name 的 i 指標超過了 name 的長度,說明 name 已經完結了
則開始判斷 types 的 j 和 j - 1 ( j 的前一個字母 ) 是否相等,相等 j 指標 +1
當 j 指標超出 types 的長度時 或者 不相等時,迴圈結束,返回false
結果:
classSolution{ publicbooleanisLongPressedName(Stringname,Stringtyped){if(name.length()>typed.length()){ returnfalse; }else{ inti=0; intj=0; while(j<typed.length()){ if(i<name.length()&&name.charAt(i)==typed.charAt(j)){ i++; j++; }else{ if(j>0&&j<typed.length()&&typed.charAt(j)==typed.charAt(j-1)){ j++; }else{ returnfalse; } } } returni==name.length()&&j==typed.length(); } } }