博客贴代码老出错也是醉了。。。
#include<iostream>
using namespace std;
struct node{
struct node*child[26];
int t;
bool exist;
node()
{
t=0;
for(int i=0;i<26;i++)
{
child[i]=NULL;
//path[i]='\0';
}
}
};
inline void makeTrie(node* head,string a)
{
if(head)
{
head->t++;
if(head->child[a[0]-'a']!=NULL)
{
if(a.length()>1)makeTrie(head->child[a[0]-'a'],a.substr(1));
else{
head->child[a[0]-'a']->t++;
}
}
else{
head->child[a[0]-'a']=new node();
if(a.length()>1)makeTrie(head->child[a[0]-'a'],a.substr(1));
else{
head->child[a[0]-'a']->t++;
}
}
}
}
void release(node*root)
{
if(root)
{
for(int i=0;i<26;i++)
{
release(root->child[i]);
if(root->child[i])delete root->child[i];
}
}
}
int find(node*head,string str)
{
node*temp=head;
while(1)
{
if(temp==NULL)return 0;
temp=temp->child[str[0]-'a'];
if(temp==NULL)return 0;
if(str.length()<=1) break;
str=str.substr(1);
}
if(temp==NULL)return 0;
return temp->t;
}
int main()
{
string str="123";
// cout<<str.substr(1);
int n,m;
cin>>n;
node* root=new node();
root->t=0;
while(n--)
{
cin>>str;
makeTrie(root,str);
}
cin>>m;
while(m--)
{
cin>>str;
cout<<find(root,str)<<endl;
}
}