字典树/前缀树

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;
    }
}
posted @ 2020-07-09 17:18  Kotonoha  阅读(152)  评论(0)    收藏  举报