您的位置:首页 > 编程语言 > C语言/C++

LeetCode 211. Add and Search Word - Data structure design

2015-08-10 10:50 591 查看
借用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 C++ Trie 字典树