zoukankan      html  css  js  c++  java
  • Trie树

    字典树,即Trie树,又称单词查找树或键树,是一种树形结构。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。

    //leetcode submit region begin(Prohibit modification and deletion)
    class Trie {
        TrieNode root;
        /** Initialize your data structure here. */
        public Trie() {
            root = new TrieNode();
        }
        
        /** Inserts a word into the trie. */
        public void insert(String word) {
            TrieNode cur =root;
            char c;
            for(int i = 0;i<word.length();i++){
                c =word.charAt(i);
                if(cur.get(c)!=null){
                    cur= cur.get(c);
                }else {
                    cur.put(c,new TrieNode());
                    cur= cur.get(c);
                }
            }
            cur.setEnd();
        }
        
        /** Returns if the word is in the trie. */
        public boolean search(String word) {
            TrieNode cur = root;
            char c;
            for(int i=0;i<word.length();i++){
                c = word.charAt(i);
                if(cur.get(c)==null)
                    return false;
                cur=cur.get(c);
            }
             return  cur.isEnd==true?true:false;
        }
        
        /** Returns if there is any word in the trie that starts with the given prefix. */
        public boolean startsWith(String prefix) {
            TrieNode cur = root;
            char c;
            for(int i=0;i<prefix.length();i++){
                c = prefix.charAt(i);
                if(cur.get(c)==null)
                    return false;
                cur=cur.get(c);
            }
            return true;
        }
    }
    class TrieNode{
    
        Map <Character, TrieNode> nextTreeNode;
        boolean isEnd;
    
        public TrieNode(){
            nextTreeNode = new HashMap<>();
            isEnd = false;
        }
    
        public boolean containsKey(char c){
            return  nextTreeNode.containsKey(c);
        }
    
        public TrieNode get(char c){
            return  nextTreeNode.get(c);
        }
    
        public void put(char c,TrieNode node){
            nextTreeNode.put(c,node);
        }
    
        public boolean isEnd(){
            return  isEnd;
        }
    
        public void setEnd(){
            isEnd = true;
        }
    }
    呵呵
  • 相关阅读:
    sublime配置文件设置解释器
    pyinstaller 简单用法
    python模块引入问题集锦与解析
    服务器上Ubuntu系统安装
    window下共存python2和python3
    python-docx about unusual operating
    docker
    网站开发(周日):项目部署上线(实战)
    网站开发(周六):项目本地调试(实战)
    网站开发(周五):项目前端页面开发(实战)
  • 原文地址:https://www.cnblogs.com/jiazhiyuan/p/12269959.html
Copyright © 2011-2022 走看看