Leetcode: Add and Search Word - Data structure design
2015-05-21 20:28
561 查看
Design a data structure that supports the following two operations:
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:
Note:
You may assume that all words are consist of lowercase letters a-z.
版本1,用MAP实现:
版本2,用数组查表:
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.
版本1,用MAP实现:
class WordDictionary { public: class CharNode { public: CharNode(): isLeaf(false) {}; map<char, CharNode *> chars; bool isLeaf; }; CharNode root; // Adds a word into the data structure. void addWord(string word) { int i; CharNode *ptr = NULL; ptr = &root; for (i = 0; i < word.length(); ++i) { if ((ptr->chars).find(word[i]) == (ptr->chars).end()) { CharNode *newNode = new CharNode(); (ptr->chars)[word[i]] = newNode; ptr = newNode; } else { ptr = (ptr->chars)[word[i]]; } } ptr->isLeaf = true; } bool _search(CharNode *r, string word) { int i; CharNode *ptr = r; for (i = 0; i < word.length(); ++i) { if (word[i] == '.') { for (map<char, CharNode *>::iterator it = (ptr->chars).begin(); it != (ptr->chars).end(); ++it) { if (_search(it->second, word.substr(i+1, word.length()-i-1)) == true) { return true; } else { continue; } } // not found return false; } if ((ptr->chars).find(word[i]) == (ptr->chars).end()) { return false; } else { ptr = (ptr->chars)[word[i]]; } } return ptr->isLeaf; } // 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 _search(&root, word); } }; // Your WordDictionary object will be instantiated and called as such: // WordDictionary wordDictionary; // wordDictionary.addWord("word"); // wordDictionary.search("pattern");
版本2,用数组查表:
class WordDictionary { public: class CharNode { public: CharNode(): isLeaf(false) {memset(chars, 0, sizeof(chars));} CharNode *chars[26]; bool isLeaf; }; CharNode root; // Adds a word into the data structure. void addWord(string word) { int i; CharNode *ptr = NULL; ptr = &root; for (i = 0; i < word.length(); ++i) { if (ptr->chars[word[i]-'a'] == NULL) { CharNode *newNode = new CharNode(); (ptr->chars)[word[i]-'a'] = newNode; ptr = newNode; } else { ptr = (ptr->chars)[word[i]-'a']; } } ptr->isLeaf = true; } bool _search(CharNode *r, string word) { int i; CharNode *ptr = r; if (ptr == NULL) return false; for (i = 0; i < word.length(); ++i) { if (word[i] == '.') { for (int j = 0; j < 26; ++j) { if (_search(ptr->chars[j], word.substr(i+1, word.length()-i-1)) == true) { return true; } else { continue; } } // not found return false; } if ((ptr->chars)[word[i]-'a'] == NULL) { return false; } else { ptr = (ptr->chars)[word[i]-'a']; } } return ptr->isLeaf; } // 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 _search(&root, word); } }; // Your WordDictionary object will be instantiated and called as such: // WordDictionary wordDictionary; // wordDictionary.addWord("word"); // wordDictionary.search("pattern");
相关文章推荐
- leetcode-211-Add and Search Word - Data structure design
- [LeetCode]Add and Search Word - Data structure design
- Leetcode: Add and Search Word - Data structure design (Java)
- Leetcode 211. Add and Search Word - Data structure design
- [LeetCode] Add and Search Word - Data structure design
- LeetCode[211] Add and Search Word - Data structure design
- Leetcode: Add and Search Word - Data structure design
- leetcode 211. Add and Search Word - Data structure design
- [Leetcode 211, Medium] Add and Search Word - Data structure design
- [LeetCode] 211. Add and Search Word - Data structure design 添加和查找单词-数据结构设计
- LeetCode-Add and Search Word - Data structure design
- LeetCode 211.Add and Search Word - Data structure design(trie树)
- 【LeetCode】211. Add and Search Word - Data structure design
- LeetCode Add and Search Word - Data structure design
- [LeetCode]Add and Search Word - Data structure design,解题报告
- LeetCode "Add and Search Word - Data structure design"
- leetcode---Add and Search Word - Data structure design---Trie树
- Leetcode 211. Add and Search Word - Data structure design
- AddandSearchWordDatastructuredesign【LeetCode】
- Leetcode 211. Add and Search Word - Data structure design