zoukankan      html  css  js  c++  java
  • May LeetCoding Challenge14 之 字典树

    字典树结点结构:

    class Node{

    boolean isWord;

    TreeMap<Character, Node> next;

    }

    字典树的应用:

    1.自动补全 2.拼写检查 3.IP 路由 4.预测文字

    字典树的局限:

    空间占用大。优化方法有压缩字典树。

    字典树主要有如下三点性质:

    1. 根节点不包含字符,除根节点意外每个节点只包含一个字符。

    2. 从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串。

    3. 每个节点的所有子节点包含的字符串不相同。

     JAVA

    class Trie {
        private class Node{
            public boolean isWord;
            public TreeMap<Character, Node> next;
            public Node(boolean isWord){
                this.isWord = isWord;
                next = new TreeMap<>();
            }
            public Node(){
                this(false);//this关键字调用重载构造方法,且必须位于构造方法的第一句
            }
        };
        private Node root;
    
        /** Initialize your data structure here. */
        public Trie() {
            root = new Node();
        }
        
        /** Inserts a word into the trie. */
        public void insert(String word) {
            Node cur = root;
            for(char c: word.toCharArray()){
                if(cur.next.get(c) == null){
                    cur.next.put(c, new Node());
                }
                cur = cur.next.get(c);
            }
            cur.isWord = true;
        }
        
        /** Returns if the word is in the trie. */
        public boolean search(String word) {
            Node cur = root;
            for(char c: word.toCharArray()){
                if(cur.next.get(c) == null)
                    return false;
                cur = cur.next.get(c);
            }
            return cur.isWord;
        }
        
        /** Returns if there is any word in the trie that starts with the given prefix. */
        public boolean startsWith(String prefix) {
            Node cur = root;
            for(char c: prefix.toCharArray()){
                if(cur.next.get(c) == null)
                    return false;
                cur = cur.next.get(c);
            }
            return true;
        }
    }

    Python3

    class Node:
        def __init__(self):
            self.next = collections.defaultdict(Node)
            self.isWord = False
    class Trie:
    
        def __init__(self):
            """
            Initialize your data structure here.
            """
            self.root = Node() 
    
        def insert(self, word: str) -> None:
            """
            Inserts a word into the trie.
            """
            cur = self.root
            for c in word:
                cur = cur.next[c]
            cur.isWord = True
    
        def search(self, word: str) -> bool:
            """
            Returns if the word is in the trie.
            """
            cur = self.root
            for c in word:
                cur = cur.next.get(c)
                if cur is None:
                    return False
            return cur.isWord
    
        def startsWith(self, prefix: str) -> bool:
            """
            Returns if there is any word in the trie that starts with the given prefix.
            """
            cur = self.root
            for c in prefix:
                cur = cur.next.get(c)
                if cur is None:
                    return False
            return True
    
    
    # Your Trie object will be instantiated and called as such:
    # obj = Trie()
    # obj.insert(word)
    # param_2 = obj.search(word)
    # param_3 = obj.startsWith(prefix)
  • 相关阅读:
    pip国内源
    高级信息系统项目管理师十大管理优秀范文
    DOM是什么
    js中!!的妙用
    Angular中@Output()的使用方法
    Js数组内对象去重
    JS去除对象或数组中的空值('',null,undefined,[],{})
    JS数组与字符串相互转换
    Js删除数组中的空值
    promise.all的应用场景举例
  • 原文地址:https://www.cnblogs.com/yawenw/p/12891349.html
Copyright © 2011-2022 走看看