Java-常用設計模式
阿新 • • 發佈:2022-05-11
package leetcode; class Trie { private Trie[] children; //當前節點是否為一個單詞的結尾 private boolean isEnd; public Trie() { //每個節點最多有26個字母 children=new Trie[26]; isEnd=false; } public void insert(String word) { Trie node=this; for(int i=0;i<word.length();i++) {//找出當前字元的下標 int index=word.charAt(i)-'a'; if(node.children[index]==null) { node.children[index]=new Trie(); } //指向下一個節點 node=node.children[index]; } node.isEnd=true; } //字首不為空,且為最後一個字元 public booleansearch(String word) { Trie node=SearchPrefix(word); return node!=null&&node.isEnd; } public boolean startsWith(String prefix) { Trie node=SearchPrefix(prefix); return node!=null; } //判斷是否有字首 public Trie SearchPrefix(String prefix) { Trie node=this; for(int i=0;i<prefix.length();i++) { int index=prefix.charAt(i)-'a'; if(node.children[index]==null) { return null; } node=node.children[index]; } return node; } }