zoukankan      html  css  js  c++  java
  • Add and Search Word

    Trie 树的一个应用

    Design a data structure that supports the following two operations:

    void addWord(word)
    bool 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.

    For example:

    addWord("bad")
    addWord("dad")
    addWord("mad")
    search("pad") -> false
    search("bad") -> true
    search(".ad") -> true
    search("b..") -> true
    

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

    class TrieNode{
    public:
        TrieNode* child[26];
        bool isWord = false;
        TrieNode() : isWord(false){
            for(auto &a : child)
                a = nullptr;
        }
    
    };
    
    class WordDictionary{
    private:
        TrieNode* root = new TrieNode();
    public:
        void addWord(string word){
            TrieNode* p = root;
            for(auto &a : word){
                int i = a - 'a';
                if(p->child[i] == nullptr) p->child[i] = new TrieNode();
                p = p->child[i];
            }
            p->isWord = true;
        }
    
        bool search(string word){
            int n = word.length();
            return search(word,n,0,root);
        }
    
        bool search(string& word,int n,int pos,TrieNode* cur){
            if(pos == n) return cur->isWord;
            if(cur == nullptr) return false;
    
            if(word[pos] == '.'){
                for(int i=0;i<26;i++){
                    if(cur->child[i]){
                        if(search(word,n,pos+1,cur->child[i])){
                            return true;
                        }
                    }
                }
            }else{
                int i = word[pos] - 'a';
                if(cur->child[i])
                    return search(word,n,pos+1,cur->child[i]);
            }
            return false;
        }
    };
  • 相关阅读:
    单元测试
    软件工程
    使用工具进行单元测试
    关于软件工程的理解
    使用Junit等工具进行单元测试
    目前对软件工程所存在的问题
    二人组-----五子棋
    使用Junit等工具进行单元测试过程记录
    对软件工程的理解以及存在的问题
    软件设计文档及数据流向图
  • 原文地址:https://www.cnblogs.com/wxquare/p/6171442.html
Copyright © 2011-2022 走看看