class Trie
{
public:
bool indicate; //数据成员;每个节点的状态指示器,判断它及其之前的节点是否构成一个完整的字符串
Trie* pnext[26]; //数据成员;因为只限定指向了小写字母(26个英文字母)
/** Initialize your data structure here. */
Trie() //构造函数
{
indicate=NULL;
memset(pnext,0,sizeof(pnext));
}
/** Inserts a word into the trie. */
void insert(string word)
{
Trie* temp=this;
for(char t:word)
{
if(temp->pnext[t-'a']==NULL)
{
Trie* new_node=new Trie();
temp->pnext[t-'a']=new_node;
}
temp=temp->pnext[t-'a'];
}
temp->indicate=true;
}
/** Returns if the word is in the trie. */
bool search(string word)
{
Trie* temp=this;
for(auto t:word)
{
if(!temp==NULL)
temp=temp->pnext[t-'a'];
}
return (!temp==NULL && temp->indicate);
}
/** Returns if there is any word in the trie that starts with the given prefix. */
bool startsWith(string prefix)
{
Trie* temp=this;
for(auto t:prefix)
{
if(!temp==NULL)
temp=temp->pnext[t-'a'];
}
return (!temp==NULL);
}
};
/**
* Your Trie object will be instantiated and called as such:
* Trie* obj = new Trie();
* obj->insert(word);
* bool param_2 = obj->search(word);
* bool param_3 = obj->startsWith(prefix);
*/