题目链接
构建前缀树(字典树)
这里采用哈希表实现
class Trie
{
public:
/** Initialize your data structure here. */
Trie()
{
}
/** Inserts a word into the trie. */
void insert(string word)
{
Trie *node = this;
for (auto c : word)
{
if (!node->next.count(c))
node->next[c] = new Trie();
node = node->next[c];
}
node->isword = true;
}
/** Returns if the word is in the trie. */
bool search(string word)
{
Trie *node = this;
for (auto c : word)
{
if (!node->next.count(c))
return false;
node = node->next[c];
}
return node->isword;
}
/** Returns if there is any word in the trie that starts with the given prefix. */
bool startsWith(string prefix)
{
Trie *node = this;
for (auto c : prefix)
{
if (!node->next.count(c))
return false;
node = node->next[c];
}
return true;
}
private:
map<char, Trie *> next = {};
bool isword = false;
};