zoukankan      html  css  js  c++  java
  • [LintCode] Add and Search Word 添加和查找单词

    Design a data structure that supports the following two operations: addWord(word) and search(word)

    search(word) can search a literal word or a regular expression string containing only letters a-z or ..

    A . means it can represent any one letter.
    Notice

    You may assume that all words are consist of lowercase letters a-z.
    Example

    addWord("bad")
    addWord("dad")
    addWord("mad")
    search("pad")  // return false
    search("bad")  // return true
    search(".ad")  // return true
    search("b..")  // return true

    LeetCode上的原题,请参见我之前的博客Add and Search Word - Data structure design

    class WordDictionary {
    public:
        struct TrieNode {
            bool isLeaf;
            TrieNode *child[26];
        };
        
        WordDictionary() {
            root = new TrieNode();
        }
    
        // Adds a word into the data structure.
        void addWord(string word) {
            TrieNode *p = root;
            for (char c : word) {
                int i = c - 'a';
                if (!p->child[i]) p->child[i] = new TrieNode();
                p = p->child[i];
            }
            p->isLeaf = true;
        }
    
        // Returns if the word is in the data structure. A word could
        // contain the dot character '.' to represent any one letter.
        bool search(string word) {
            search(word, root, 0);
        }
        
        bool search(string &word, TrieNode *p, int i) {
            if (i == word.size()) return p->isLeaf;
            if (word[i] == '.') {
                for (auto a : p->child) {
                    if (a && search(word, a, i + 1)) return true;
                }
                return false;
            } else {
                return p->child[word[i] - 'a'] && search(word, p->child[word[i] - 'a'], i + 1);
            }
        }
    
    private:
        TrieNode *root;
    };
  • 相关阅读:
    软件工程概论-用户登录界面
    2016.11.25异常处理
    2016.11.18多态
    2016.11.11继承与接口
    11.6数组
    10.28字符串加密等
    python 读写文件
    python可变的类型、不可变的类型
    python 字典练习 记录学生是否交作业的小程序
    python字典
  • 原文地址:https://www.cnblogs.com/grandyang/p/5574600.html
Copyright © 2011-2022 走看看