public void insert(String word) {
for (int i = 0; i < word.length(); i++) {
if (node.children[word.charAt(i) - 'a'] == null)
node.children[word.charAt(i) - 'a'] = new TrieNode();
node = node.children[word.charAt(i) - 'a'];
public boolean search(String word) {
for (int i = 0; i < word.length(); i++) {
if (node.children[word.charAt(i) - 'a'] == null)
node = node.children[word.charAt(i) - 'a'];
public boolean startsWith(String prefix) {
for (int i = 0; i < prefix.length(); i++) {
if (node.children[prefix.charAt(i) - 'a'] == null)
node = node.children[prefix.charAt(i) - 'a'];
return node.preCount > 0;
int count; //表示以该处节点构成的串的个数
int preCount; //表示以该处节点构成的前缀的字串的个数
children = new TrieNode[26];