class WordDictionary {
public:
struct Node{
Node *node[26];
bool is_end;
Node()
{
is_end=false;
for(int i=0;i< 26;i++)
{
node[i]=NULL;
}
}
};
Node *root;
WordDictionary() {
root =new Node();
}
void addWord(string word) {
auto p = root;
for(auto c : word)
{
int i = c -'a';
if(!p->node[i]) p->node[i] =new Node();
p=p->node[i];
}
p->is_end =true;
}
bool search(string word) {
return dfs(root,word,0);
}
bool dfs(Node * root ,string & s ,int i)
{
if(i == s.size()) return root->is_end;
if(s[i]!='.')
{
int n = s[i] - 'a';
if(!root->node[n]) return false;
return dfs(root ->node[n] , s, 1+i);
}else
{
for(int j=0 ;j < 26;j++)
{
if(root->node[j] &&dfs(root ->node[j] , s, 1+i))
return true;
}
return false;
}
}
};
/**
* Your WordDictionary object will be instantiated and called as such:
* WordDictionary* obj = new WordDictionary();
* obj->addWord(word);
* bool param_2 = obj->search(word);
*/
本文含有隐藏内容,请 开通VIP 后查看