Add and Search Word

来源:互联网 发布:java 调用wireshark 编辑:程序博客网 时间:2024/04/29 13:00

题目描述:

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.

解题思路:使用字典树(trie)


AC代码如下(时间:85ms

class TrieNode {public:// Initialize your data structure here.TrieNode(){m_isWord = false;for (int i = 0; i < 26; ++i){next[i] = NULL;}}void setIsWord(bool isWord){m_isWord = isWord;}bool getIsWord(void){return m_isWord;}public:bool m_isWord;TrieNode* next[26];};class WordDictionary {public:WordDictionary(){root = new TrieNode();}// Adds a word into the data structure.void addWord(string word) {int len = word.length();if (len == 0) return;TrieNode* p = root;for (int i = 0; i < len; ++i){if (p->next[word[i] - 'a'] == NULL){p->next[word[i] - 'a'] = new TrieNode();p = p->next[word[i] - 'a'];}else{p = p->next[word[i] - 'a'];}}p->setIsWord(true);}bool search(string word){return search(word, 0, root);}// Returns if the word is in the data structure. A word could// contain the dot character '.' to represent any one letter.bool search(const string& word,int curIndex,TrieNode* curNode) {if (curIndex == word.length()) return curNode->getIsWord();if (word[curIndex] == '.'){bool res = false;for (int i = 0; i < 26; ++i){if (curNode->next[i] != NULL){res = search(word, curIndex + 1, curNode->next[i]);if (res) return true;}}return false;}else{if (curNode->next[word[curIndex] - 'a'] != NULL){return search(word, curIndex + 1, curNode->next[word[curIndex] - 'a']);}else{return false;}}}private:TrieNode* root;};

0 0
原创粉丝点击