zoukankan      html  css  js  c++  java
  • 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
    

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

    Analyse: The same as Implement Trie. If '.' is encountered, we need to traversal all situations. 

    Runtime: 88ms.

     1 class TrieNode{
     2 public:
     3     TrieNode* childNode[27];
     4     bool isVal;
     5     TrieNode(){
     6         isVal = false;
     7         for(int i = 0; i < 27; i++) 
     8             childNode[i] = NULL;
     9     }
    10 };
    11 class WordDictionary {
    12 private: 
    13     TrieNode* root;
    14 public:
    15     WordDictionary(){
    16         root = new TrieNode();
    17     }
    18     // Adds a word into the data structure.
    19     void addWord(string word) {
    20         TrieNode* temp = root;
    21         for(int i = 0; i < word.size(); i++){
    22             int index = word[i] - 'a';
    23             if(word[i] == '.') 
    24                 index = 26;
    25             else{
    26                 if(temp->childNode[index] == NULL)
    27                     temp->childNode[index] = new TrieNode();
    28             }
    29             temp = temp->childNode[index];
    30         }
    31         temp->isVal = true; //word has been inserted
    32     }
    33 
    34     // Returns if the word is in the data structure. A word could
    35     // contain the dot character '.' to represent any one letter.
    36     bool search(string word) {
    37         return levelSearch(word, root, 0);
    38     }
    39     
    40     bool levelSearch(string& word, TrieNode* root, int index){
    41         TrieNode* temp = root;
    42         if(!temp) return false; //length of the word is larger than that of the strings in the trie
    43         if(index >= word.size()) return temp->isVal;
    44         
    45         if(word[index] != '.') 
    46             return levelSearch(word, temp->childNode[word[index] - 'a'], index + 1);
    47         else{
    48             for(int i = 0; i < 26; i++)
    49                 if(levelSearch(word, temp->childNode[i], index + 1)) return true;
    50             return false;
    51         }
    52     }
    53 };
    54 
    55 // Your WordDictionary object will be instantiated and called as such:
    56 // WordDictionary wordDictionary;
    57 // wordDictionary.addWord("word");
    58 // wordDictionary.search("pattern");
  • 相关阅读:
    如何写UCHOME移动接口
    无限分类数据树形格式化
    linux下安装eclipse
    python编辑器对比和推荐
    黑马程序员面向对象07天6 (final)
    黑马程序员面向对象07天4 (super,this)
    黑马程序员面向对象07天8 (模版方法)
    黑马程序员面向对象07天7 (接口Interface)
    黑马程序员面向对象08天2 (多态)
    黑马程序员面向对象07天2 (抽象类测试)
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/4740930.html
Copyright © 2011-2022 走看看