LeetCode|Add and Search Word - Data structure design

来源:互联网 发布:安卓js css本地打包 编辑:程序博客网 时间:2024/06/11 20:01

Add and Search Word - Data structure design

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") -> falsesearch("bad") -> truesearch(".ad") -> truesearch("b..") -> true

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

class WordDictionary {public:    WordDictionary(){        root = new Node();    }    // Adds a word into the data structure.    void addWord(string word) {        int len = word.length();        Node* p = root;        for(int i = 0; i < len; i++){            int id = word[i] - 'a';            if(p->next[id] == NULL) p->next[id] = new Node();            p = p->next[id];        } p->someWordCompleteHere = 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) {        return dfs(word, root, 0);    }private:    struct Node{        Node(){            someWordCompleteHere = false;            memset(next, NULL, sizeof(next));        }        bool someWordCompleteHere;           Node *next[26];    } * root;    bool dfs(string& word, Node* p, int i){        if(i == word.length()) return p->someWordCompleteHere;        int id = -1;        if(word[i] != '.') id = word[i] - 'a';        if(id != -1){            if(p->next[id] == NULL) return false;            else return dfs(word, p->next[id], i+1);        }        for(int id = 0; id < 26; id++){            if(p->next[id] != NULL && dfs(word, p->next[id], i+1)) return true;        } return false;    }};// Your WordDictionary object will be instantiated and called as such:// WordDictionary wordDictionary;// wordDictionary.addWord("word");// wordDictionary.search("pattern");
0 0
原创粉丝点击