class Node { final static int the_maxsize = 26; Node[] list = new Node[the_maxsize]; char data; boolean isEnd = false; //用isEnd 代替isSelf 节约空间 } class Trie { Node node = new Node(); /** Initialize your data structure here. */ public Trie() {} /** Inserts a word into the trie. */ public void insert(String word) { Node temp = node; char[] c = word.toCharArray(); for (int i = 0; i < c.length; i++) { int loc = c[i] - 'a'; if (temp.list[loc] == null) { temp.list[loc] = new Node(); temp.list[loc].data = c[i]; } temp = temp.list[loc]; } temp.isEnd = true; } /** Returns if the word is in the trie. */ public boolean search(String word) { if (word == null) return false; Node temp = node; char[] c = word.toCharArray(); for (int i = 0; i < c.length; i++) { int loc = c[i] - 'a'; if (temp.list[loc] != null) temp = temp.list[loc]; else return false; } if (temp.isEnd ) return true; else return false; } /** * Returns if there is any word in the trie that starts with the given prefix. */ public boolean startsWith(String prefix) { Node temp = node; char[] c = prefix.toCharArray(); for (int i = 0; i < c.length; i++) { int loc = c[i] - 'a'; if (temp.list[loc] != null) temp = temp.list[loc]; else return false; } return true; } }