字典树
public class Trie {
int size;
Node root;
class Node{
char c;
Node[] childrens;
int num;
boolean isWord;
Node(){
childrens = new Node[size];
}
}
Trie(int size){
this.size = size;
root = new Node();
}
public void Insert(String str){
if (str==null || str.equals("")){
return;
}
int length = str.length();
Node item =root;
for(int i=0;i<length;++i){
char c = str.charAt(i);
int index = c - 'a';
if (item.childrens[index]==null){
item.childrens[index] = new Node();
item.childrens[index].c = c;
item.childrens[index].num = 1;
}else{
item.childrens[index].num += 1;
}
item = item.childrens[index];
if(i==length-1){
item.isWord = true;
}
}
}
public boolean searchWord(String word){
if (word==null || word.equals("")){
return false;
}
int length = word.length();
Node item = root;
for(int i=0;i<length;++i){
char c= word.charAt(i);
int index = c-'a';
item = item.childrens[index];
if (item==null){
return false;
}
}
return item.isWord==true;
}
public boolean startsWith(String prefix){
if (prefix==null || prefix.equals("")){
return false;
}
int length = prefix.length();
Node item = root;
for(int i=0;i<length;++i){
char c = prefix.charAt(i);
int index = c-'a';
if (item.childrens[index]==null || item.childrens[index].c!=c){
return false;
}
item = item.childrens[index];
}
return true;
}
public static void main(String[] args) {
Trie trie = new Trie(26);
trie.Insert("apple");
trie.Insert("app");
System.out.println(trie.searchWord("appl"));
System.out.println(trie.searchWord("apple"));
System.out.println(trie.startsWith("ap"));
System.out.println(trie.startsWith("al"));
}
}