class Trie{
//26个字母,最多有26条路径
Trie[] next;
//子节点为单词结尾标记
boolean isEnd;
Trie(){
next=new Trie[26];
isEnd=false;
}
//插入字符串形成前缀树分支
public void insert(String str){
//标记当前节点位置
Trie curPos=this;
for(int i=str.length()-1;i>=0;i--){
//字母
int t=str.charAt(i)-'a';
//如果无当前路径,加入路径
if(curPos.next[t]==null)
curPos.next[t]=new Trie();
//从新加入的节点进行操作
curPos=curPos.next[t];
}
//字符串加入完成,标记结尾
curPos.isEnd=true;
}
//搜索
public boolean search(String target){
if(target.isEmpty()||target==null)
return false;
Trie curPos=this;
for(int i=target.length()-1;i>=0;i--){
int t=target.charAt(i)-'a';
if(curPos.next[t]==null)
return false;
else
curPos=curPos.next[t];
}
return true;
}
}