借用LeetCode 208. Implement Trie (Prefix Tree)中设计的字典树,特判查询字符为.时的情况即可。
注意:
成员变量的初始化应放在构造函数的initializing list而不是body中,使成员变量只被初始化一次,没有被再次赋值;
使用shared_ptr代替裸指针来管理内存。
代码:
class TrieNode { public: TrieNode(): is_word(false) {} void insert(const string& word) { if (!word.empty()) { nodes[word.front()] = nodes[word.front()] != nullptr ? nodes[word.front()] : shared_ptr<TrieNode>(new TrieNode); nodes[word.front()]->insert(word.substr(1)); } else { is_word = true; } } bool search(string word) { if (!word.empty()) { if (word.front() == '.') { bool ret = false; for (auto it = nodes.begin(); it != nodes.end() && !ret; ++ it) { ret = ret || it->second->search(word.substr(1)); } return ret; } else if (nodes.find(word.front()) != nodes.end()) { return nodes[word.front()]->search(word.substr(1)); } else { return false; } } return is_word; } map<char, shared_ptr<TrieNode>> nodes; bool is_word; }; class WordDictionary { public: WordDictionary(): root(shared_ptr<TrieNode>(new TrieNode())) {} void addWord(string word) { root->insert(word); } bool search(string word) { return root->search(word); } private: shared_ptr<TrieNode> root; };
版权声明:本文为博主原创文章,未经博主允许不得转载。
LeetCode 211. Add and Search Word - Data structure design
原文地址:http://blog.csdn.net/stephen_wong/article/details/47395303