• 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;
        }
    };
  • 相关阅读:
    限制字数输出,,超出的用...
    tablesorter 的使用
    二维数组根据某个特定字段排序
    对维数组排序 array_multisort()的应用
    多个字段关键字查询
    CASE WHEN用法
    type="submit" button的用法
    获取近30天的数据的时间方式
    练习题
    管理经济学第九章
  • 原文地址:https://www.cnblogs.com/lMonster81/p/10433752.html
Copyright © 2020-2023  润新知