写这个的原因是今天的每日一题要用到 然而我连前缀树都不会写 于是写一下前缀树 每日一题就不写了 嗯 没有时间
class Trie {
Trie[] child;
boolean isEnd;
public Trie() {
child=new Trie[26];
isEnd=false;
}
public void insert(String word) {
Trie node=this;
for(int i=0;i<word.length();i++){
int k=word.charAt(i)-a;
if(node.child[k]==null){
node.child[k]=new Trie();
}
node=node.child[k];
}
node.isEnd=true;//最后一个字母的isEnd为true
}
public boolean search(String word) {
Trie node=this;
for(int i=0;i<word.length();i++){
int k=word.charAt(i)-a;
if(node.child[k]==null){
return false;
}
node=node.child[k];
}
return node.isEnd;//是否是结尾,说明是否是一个完整的词
}
public boolean startsWith(String prefix) {
Trie node=this;
for(int i=0;i<prefix.length();i++){
int k=prefix.charAt(i)-a;
if(node.child[k]==null){
return false;
}
node=node.child[k];
}
return true;//不需要是结尾
}
}