题目链接:
https://hihocoder.com/problemset/problem/1014
题解:
字典树模版
代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define met(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f;
const int maxn = 26;
struct Tire
{
Tire *next[maxn];
int cnt;
Tire(){
cnt=0;
for(int i=0;i<maxn;i++)
next[i]=NULL;
}
// 初始化
}root;
char s[maxn];
void create(char *s)
{
int len=strlen(s);
Tire *p=&root;
for(int i=0;i<len;i++)
{
int pos=s[i]-'a';
if(p->next[pos]==NULL)
p->next[pos]=new Tire();
// 如果为空,那么就新建一个
p=p->next[pos];
p->cnt++;
}
}
int search(char *s)
{
int len=strlen(s);
Tire *p=&root;
for(int i=0;i<len;i++)
{
int pos=s[i]-'a';
if(p->next[pos]==NULL)
return 0;
p=p->next[pos];
}
return p->cnt;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)
{
scanf("%s",s);
create(s);
}
int m;
scanf("%d",&m);
while(m--)
{
scanf("%s",s);
printf("%d\n",search(s));
}
}
}