Implement a trie with insert
, search
, and startsWith
methods.
Note:
You may assume that all inputs are consist of lowercase letters a-z
.
Subscribe to see which companies asked this question
class TrieNode
{
public:
// Initialize your data structure here.
TrieNode()
{
memset(child,NULL,sizeof(child));
flag=false;
}
TrieNode* child[26];
bool flag;
};
class Trie
{
public:
Trie()
{
root = new TrieNode();
}
// Inserts a word into the trie.
void insert(string word)
{
TrieNode* p=root;
for(int i=0;i<word.size();i++)
{
if(p->child[word[i]-'a']!=NULL)
{
p=p->child[word[i]-'a'];
}
else
{
p->child[word[i]-'a']=new TrieNode();
p=p->child[word[i]-'a'];
}
}
p->flag=true; //表明到此处为一个字符串
}
// Returns if the word is in the trie.
bool search(string word)
{
TrieNode* p=root;
for(int i=0;i<word.size();i++)
{
if(p->child[word[i]-'a']==NULL)
return false;
p=p->child[word[i]-'a'];
}
if(p->flag)
return true;
return false;
}
// Returns if there is any word in the trie
// that starts with the given prefix.
bool startsWith(string prefix)
{
TrieNode* p=root;
for(int i=0;i<prefix.size();i++)
{
if(p->child[prefix[i]-'a']==NULL)
return false;
p=p->child[prefix[i]-'a'];
}
return true;
}
private:
TrieNode* root;
};
// Your Trie object will be instantiated and called as such:
// Trie trie;
// trie.insert("somestring");
// trie.search("key");