简单trie树应用,在查询的时候如果碰到 '.'的情况,就搜索所有相连的字母,继续查找,只要基于这些相连的字母的查找有一个是有效的,那么就返回true.
class WordDictionary {
public:
class node
{
public:
int have;
node *next[26];
node(){have=0;for(int i=0;i<26;i++) next[i]=NULL;}
};
node *root=new node();
// Adds a word into the data structure.
void addWord(string word) {
node *p=root;
for(int i=0;i<word.size();i++)
{
int j=word[i]-'a';
if(p->next[j]==NULL) p->next[j]=new node();
p=p->next[j];
}
p->have=1;
}
// Returns if the word is in the data structure. A word could
// contain the dot character '.' to represent any one letter.
bool dfs(int x,string word,node *tmp)
{
if(x>=word.size()) return (tmp->have)?true:false;
if(tmp==NULL) return false;
int flag=0;
if(word[x]=='.')
{
int j;
for(int i=0;i<26;i++)
{
if(tmp->next[i]) {j=dfs(x+1,word,tmp->next[i]);if(j) flag=1;}
}
return flag;
}
else
{
int k=word[x]-'a';
if(tmp->next[k]==NULL) return false;
return dfs(x+1,word,tmp->next[k]);
}
}
bool search(string word) {
node *p=root;
return dfs(0,word,root);
}
};