解法
每一个节点实际上就是一个数组,还需要加上一个isEnd的标志,app,apple,走到app的时候,需要这个isEnd
最开始迷惑的点就是要不要多创建一个TrieNode这个类,还有isEnd标志位没有考虑到。
代码
class Trie { TrieNode root; /** Initialize your data structure here. */ public Trie() { root=new TrieNode(); } /** Inserts a word into the trie. */ public void insert(String word) { TrieNode cur=root; for(int i=0;i<word.length();i++) { int temp=word.charAt(i)-'a'; if(cur.arr[temp]==null) { cur.arr[temp]=new TrieNode(); } cur=cur.arr[temp]; } cur.isEnd=true; } /** Returns if the word is in the trie. */ public boolean search(String word) { TrieNode cur=root; for(int i=0;i<word.length();i++) { int temp=word.charAt(i)-'a'; if(cur.arr[temp]==null) { return false; } cur=cur.arr[temp]; } return cur.isEnd; } /** Returns if there is any word in the trie that starts with the given prefix. */ public boolean startsWith(String prefix) { TrieNode cur=root; for(int i=0;i<prefix.length();i++) { int temp=prefix.charAt(i)-'a'; if(cur.arr[temp]==null) { return false; } cur=cur.arr[temp]; } return true; } } public class TrieNode{ TrieNode[] arr; boolean isEnd; public TrieNode() { arr=new TrieNode[26]; isEnd=false; } }