• LeetCode OJ:Add and Search Word


    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

    这题用set做的话可能会超时,应该自己定义数据结构,构造一个单词数,这样效率更高,在搜索的时候就是dfs了, 代码如下:

     1 class WordDictionary {
     2 public:
     3     struct TreeNode{
     4     public:
     5         TreeNode *child[26];
     6         bool isWord;
     7 
     8         TreeNode() : isWord(false){
     9             for(auto & a : child)
    10                 a = NULL;
    11         }
    12     };
    13 
    14     WordDictionary() {
    15         root = new TreeNode();
    16     }
    17 
    18     // Adds a word into the data structure.
    19     void addWord(string word) {
    20         TreeNode * p = root;
    21         for(auto & a : word){
    22             if(!p->child[a-'a'])
    23                 p->child[a-'a'] = new TreeNode;
    24             p = p->child[a-'a'];
    25         }
    26         p->isWord = true;//标记一个单词
    27     }
    28 
    29 
    30     bool searchWord(string & word, TreeNode * p, int index)
    31     {
    32         if(word.size() == index) return p->isWord;//这条很关键
    33         if(word[index] == '.'){
    34             for(auto & a : p->child){
    35                 if(a && searchWord(word, a, index+1)) return true;
    36             }
    37             return false;//不要忘了
    38         }else{
    39             return (p->child[word[index] - 'a'])&&searchWord(word, p->child[word[index] - 'a'], index+1);
    40         }
    41     }
    42 
    43 
    46     bool search(string word) {
    47         return searchWord(word, root, 0);
    48     }
    49 
    50 
    51 
    52 
    53     // WordDictionary()//进入函数后会首先执行构造函数
    54     // : root(new TreeNode) {}
    55 private:
    56     TreeNode * root;
    57 };

    这回写的比较乱,见谅

  • 相关阅读:
    2021年最后的每日一题练习 (持续更新)
    ColorPickUper类算出图片的主要色调
    js控制gif从第一帧开始播放的办法
    ExternalInterface.addCallBack 在TT浏览器 IETester等浏览器上的问题
    js版的矩形式图,算法借鉴datavjs
    Feathers ui给组件加个特定的皮肤
    linux笔记
    ofbiz调试
    ofbiz 笔记
    给gridview动态生成radiobutton添加OnCheckedChanged监听函数
  • 原文地址:https://www.cnblogs.com/-wang-cheng/p/4975929.html
Copyright © 2020-2023  润新知