leetcode 925長按鍵入
阿新 • • 發佈:2020-08-11
925. 長按鍵入
你的朋友正在使用鍵盤輸入他的名字name。偶爾,在鍵入字元c時,按鍵可能會被長按,而字元可能被輸入 1 次或多次。
你將會檢查鍵盤輸入的字元typed。如果它對應的可能是你的朋友的名字(其中一些字元可能被長按),那麼就返回True。
輸入:name = "alex", typed = "aaleex" 輸出:true 解釋:'alex' 中的 'a' 和 'e' 被長按。 輸入:name = "saeed", typed = "ssaaedd" 輸出:false 解釋:'e' 一定需要被鍵入兩次,但在 typed 的輸出中不是這樣。 輸入:name = "leelee", typed = "lleeelee" 輸出:true 輸入:name = "laiden", typed = "laiden" 輸出:true 解釋:長按名字中的字元並不是必要的。
最先採用雙指標的解法,即設定指標 i 指向 name ,j 指向 typed ,
if(name[i]==typed[j]){ i+=1; j+=1; }else{ j+=1; ]
大致是這個思路,但是由於熱心的朝陽網友,出現了很多和題意不太相符的測試用例,官方題解的雙指標解法也GG了
所以我用了一個檢查字元序列和數目的方法:
class Solution { public boolean isLongPressedName(String name, String typed) { Map<Character,Integer> map1 = getMap(name); Map<Character,Integer> map2 = getMap(typed); for(char each:name.toCharArray()){ if(map1.getOrDefault(each,0)>map2.getOrDefault(each,0)) return false; } return true; } public static Map<Character, Integer> getMap(String s) { Map<Character,Integer> map= new HashMap<>(); char c[] = s.toCharArray(); for(char each:c){ map.put(each,map.getOrDefault(each,0)+1); } return map; } }