#include<iostream>
using namespace std;
char s[1000100];
int son[1000100][26],num[1000100],idx;
void insert(char *s)
{
int p=0;
for(int i=0;s[i];i++)
{
int &u=son[p][s[i]-'a'];
if(!u) u=++idx;
p=u;
}
num[p]++;///想问一下这个具体含义是什么/////num数组存放的是什么东西//////为什么不能写成num[p]=1
}
int find(char *s)
{
int res=0,p=0;
for(int i=0;s[i];i++)
{
int &u=son[p][s[i]-'a'];
if(!u) break;
p=u;res+=num[p];///这里不能写成res++? ovo 感觉我还是没理解字典树啊啊啊
}
return res;
}
int main()
{
int n,m;cin>>n>>m;
while(n--) cin>>s,insert(s);
while(m--)
{
cin>>s;
cout<<find(s)<<endl;
}
}
提问于2天前
724