基本的tire树 加上模板
#include<iostream>
#include<math.h>
#include<cstdio>
#include<stdlib.h>
#include<cstring>
using namespace std;
#define MAX 26
typedef struct tirenode
{
int nCount; // 该节点前缀 出现的次数
struct tirenode *next[MAX];//该节点的后续节点
} tirenode;
int allocp =0;
tirenode *creat()
{
tirenode *tmp=(tirenode*)malloc(sizeof(tirenode));
tmp->nCount=1;
for(int i=0;i<MAX;i++)
tmp->next[i]=NULL;
return tmp;
}
void intsert(tirenode **proot,char *str)
{
tirenode*tmp=*proot;
int i=0,k;
while(str[i])
{
k=str[i]-'a';
if(tmp->next[k])
{
tmp->next[k]->nCount++;
}
else {
tmp->next[k]=creat();
}
tmp=tmp->next[k];
i++;
}
}
int searcht(tirenode*root,char *str)
{
if(root==NULL)
return 0;
tirenode*tmp=root;
int i=0,k;
while(str[i])
{
k=str[i]-'a';
if(tmp->next[k])
{
tmp=tmp->next[k];
}
else return 0;
i++;
}
return tmp->nCount;
}
int main()
{
tirenode *root=creat();
int t;
char s[100100];
scanf("%d%*c",&t);
while(t--)
{
gets(s);
intsert(&root,s);
}
scanf("%d%*c",&t);
while(t--)
{gets(s);
printf("%d\n",searcht(root,s));
}
return 0;
}