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;
        }
    };
  • 相关阅读:
    Codeforces Round #197 (Div. 2)
    hdu4499Cannon(搜索)
    poj1054The Troublesome Frog
    hdu4705Y
    hdu1054Strategic Game(树形DP)
    poj2029Get Many Persimmon Trees(最大矩阵和)
    poj3280Cheapest Palindrome(记忆化)
    poj3140Contestants Division
    Spring的AOP机制---- 各类通知总结---- 各类通知总结
    Spring的AOP机制---- AOP最终通知---- AOP最终通知
  • 原文地址:https://www.cnblogs.com/lMonster81/p/10433752.html
Copyright © 2011-2022 走看看