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;
        }
    }
    呵呵
  • 相关阅读:
    Unity动态更换图片
    (特殊的)增删改查
    SQL Server 锁
    [转]排序规则
    [转]C#编写Windows服务程序图文教程
    [转]FreeTextBox使用详解 (版本3.1.1)
    [转]Newtonsoft.Json序列化和反序列
    C#性能优化实践(摘抄)
    一、PID控制原理
    POJ 2255已知二叉树前序中序求后序
  • 原文地址:https://www.cnblogs.com/jiazhiyuan/p/12269959.html
Copyright © 2011-2022 走看看