代码:
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+5;
int now,cnt=1,num,ans;
int getnumber(char ch)
{
return ch-'a';
}
struct EDGE{
int son[26];
int cnt;
}edge[MAXN];
int n,m;
string s;
void insert(string s)
{
now=1;
for(int i=0;i<s.size();i++)
{
num=getnumber(s[i]);
if(!edge[now].son[num])
edge[now].son[num]=++cnt;
now=edge[now].son[num];
if(i==s.size()-1) edge[now].cnt++;
}
return;
}
void find(string s)
{
ans=0;
now=1;
for(int i=0;i<s.size();i++)
{
num=getnumber(s[i]);
if(!edge[now].son[num])
{
printf("%d\n",ans);
return;
}
now=edge[now].son[num];
ans+=edge[now].cnt;
}
printf("%d\n",ans);
return;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%s",s);
insert(s);
}
for(int i=1;i<=m;i++)
{
scanf("%s",s);
find(s);
}
return 0;
}
0pts