Trie树,第一次写,简单的建树+搜索
它的思路hiho上讲得很清楚,good~
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 char word[11]; 5 int n,m; 6 struct trie 7 { 8 int num; 9 trie *next[26]; 10 trie() 11 { 12 num = 0; 13 for(int i = 0; i < 26; i++) 14 next[i] = 0; 15 } 16 }t; 17 trie *p; 18 void setup(char w[]) 19 { 20 p = &t; 21 for(int i = 0; word[i]; i++) 22 { 23 int pos = word[i] - 'a'; 24 if(p->next[pos] == 0) 25 { 26 trie *q; 27 q = new trie(); 28 p->next[pos] = q; 29 } 30 p = p->next[pos]; 31 p->num++; 32 } 33 } 34 35 int findnum(char word[]) 36 { 37 p = &t; 38 for(int i = 0; word[i];i++) 39 { 40 int pos = word[i] - 'a'; 41 if(p->next[pos] == 0) return 0; 42 p = p->next[pos]; 43 } 44 return p->num; 45 } 46 47 int main() 48 { 49 cin>>n; 50 while(n--) 51 { 52 cin>>word; 53 setup(word); 54 } 55 cin>>m; 56 while(m--) 57 { 58 cin>>word; 59 cout<<findnum(word)<<endl; 60 } 61 return 0; 62 }