Trie树,第一次写,简单的建树+搜索
它的思路hiho上讲得很清楚,good~
#include<iostream>
#include<string>
using namespace std;
char word[];
int n,m;
struct trie
{
int num;
trie *next[];
trie()
{
num = ;
for(int i = ; i < ; i++)
next[i] = ;
}
}t;
trie *p;
void setup(char w[])
{
p = &t;
for(int i = ; word[i]; i++)
{
int pos = word[i] - 'a';
if(p->next[pos] == )
{
trie *q;
q = new trie();
p->next[pos] = q;
}
p = p->next[pos];
p->num++;
}
} int findnum(char word[])
{
p = &t;
for(int i = ; word[i];i++)
{
int pos = word[i] - 'a';
if(p->next[pos] == ) return ;
p = p->next[pos];
}
return p->num;
} int main()
{
cin>>n;
while(n--)
{
cin>>word;
setup(word);
}
cin>>m;
while(m--)
{
cin>>word;
cout<<findnum(word)<<endl;
}
return ;
}