zoukankan      html  css  js  c++  java
  • Leetcode208. Implement Trie (Prefix Tree)实现Trie(前缀树)

    实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。

    示例:

    Trie trie = new Trie(); trie.insert("apple"); trie.search("apple"); // 返回 true trie.search("app"); // 返回 false trie.startsWith("app"); // 返回 true trie.insert("app"); trie.search("app"); // 返回 true

    说明:

    • 你可以假设所有的输入都是由小写字母 a-z 构成的。
    • 保证所有输入均为非空字符串。

    前缀树的基础原理实现

    class Trie {
    public:
    struct TrieNode
        {
            TrieNode() : isword(false), children(26, nullptr){}
            ~TrieNode()
            {
                for(TrieNode* child : children)
                {
                    if(child)
                        delete child;
                }
            }
            bool isword;
            vector<TrieNode*> children;
        };
        /** Initialize your data structure here. */
        Trie() : root(new TrieNode())
        {
        }
        
        TrieNode* root;
    
        const TrieNode* Find(const string &prefix) const
        {
            const TrieNode* newRoot = root;
            for(const char c : prefix)
            {
                newRoot = newRoot ->children[c - 'a'];
                if(newRoot == nullptr)
                break;
            }
            return newRoot;
        }
    
        /** Inserts a word into the trie. */
        void insert(string word) 
        {
            TrieNode* newRoot = root;
            for(char c : word)
            {
                if(newRoot ->children[c - 'a'] == nullptr)
                {
                    newRoot ->children[c - 'a'] = new TrieNode();
                }
                newRoot = newRoot ->children[c - 'a'];
            }
            newRoot ->isword = true;
        }
        
        /** Returns if the word is in the trie. */
        bool search(string word) 
        {
            const TrieNode* tmp = Find(word);
            return tmp != nullptr && tmp ->isword == true;
        }
        
        /** Returns if there is any word in the trie that starts with the given prefix. */
        bool startsWith(string prefix) 
        {
            return Find(prefix) != nullptr;
        }
    };
  • 相关阅读:
    Python3---常见函数---super()
    Python3---常见函数---type()
    Python3---面对对象
    Python3---BeautifulSoup---节点选择器
    Python3---Beautiful Soup
    0X01应用程序黑客技术
    Python3---标准库---re
    (trie) UVA
    (trie)UVALive
    (平方分割)POJ 2104 K-th Number
  • 原文地址:https://www.cnblogs.com/lMonster81/p/10433752.html
Copyright © 2011-2022 走看看