题意:实现添加单词和查找单词的作用,即实现字典功能。
思路:'.' 可以代表一个任何小写字母,可能是".abc"或者"a.bc"或者"abc.",能应对这三种就没有问题了。在每个单词的尾字母上标上tag=1,代表从树根到此节点有一个单词。暂时想不到更快的办法。
1 class WordDictionary { 2 public: 3 WordDictionary(){ 4 tree=create(); 5 } 6 void addWord(string word) { 7 node *tmp=tree; 8 node *p=0; //负责创建结点 9 for(int i=0; i<word.size(); i++) 10 { 11 if(!tmp->next[word[i]-'a']) //没有这个分支,创建它 12 { 13 p=create(); 14 tmp->next[word[i]-'a']=p; 15 } 16 tmp=tmp->next[word[i]-'a']; //往下走 17 } 18 tmp->tag=1; 19 } 20 21 bool search(string word) { 22 if(DFS(tree,word.c_str())==true)//搜 23 return true; 24 return false; 25 } 26 private: 27 28 struct node 29 { 30 bool tag; 31 node *next[26]; 32 33 }; 34 node *tree;//先建立树根 35 node *create() 36 { 37 node *tmp=new(node); 38 tmp->tag=0; 39 for(int i=0; i<26; i++) 40 tmp->next[i]=0; 41 return tmp; 42 } 43 bool DFS(node *t,const char *p) 44 { 45 if(*(p+1)=='