Trie数组经典应用:
C++ 代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int n,m;
int son[N][26],cnt[N],idx;
void insert(char *str)
{
int p=0;
for(int i=0;str[i];i++)
{
int u=str[i]-'a';
if(!son[p][u]) son[p][u]=++idx;
p=son[p][u];
}
cnt[p]++;
}
int query(char *str)
{
int p=0,co=0;
for(int i=0;str[i];i++)
{
int u=str[i]-'a';
if(!son[p][u]) return co;
co+=cnt[son[p][u]];
p=son[p][u];
}
return co;
}
int main()
{
cin>>n>>m;
char s[N];
while(n--)
{
scanf("%s",s);
insert(s);
}
while(m--)
{
scanf("%s",s);
cout<<query(s)<<endl;
}
return 0;
}