1. 程式人生 > 實用技巧 >JAVA 之 每日一記 之 演算法 ( 長按鍵入 )

JAVA 之 每日一記 之 演算法 ( 長按鍵入 )

題目詳解:

你的朋友正在使用鍵盤輸入他的名字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
解釋:長按名字中的字元並不是必要的。

提示:
  1. name.length <= 1000
  2. typed.length <= 1000
  3. nametyped的字元都是小寫字母。

思路:

建立 雙向性指標,分別用於指向 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(); } } }