trie树:一种用于实现字符串快速检索的多叉树结构。形如下图
要点:这里要累加路径上的cnt【p】的值
代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
const int N=1e5+10;
int son[N][26],cnt[N],idx;
char a[1000000];
int n,m;
void insert(char a[])
{
int p=0;
for(int i=0;a[i];i++)
{
int u=a[i]-'a';
if(!son[p][u]) son[p][u]=++idx;
p=son[p][u];
}
cnt[p]++;
}
int query(char a[])
{
int p=0,sum=0;
for(int i=0;a[i];i++)
{
int u=a[i]-'a';
p=son[p][u];
if(!p) return sum;
sum+=cnt[p];
}
return sum;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
scanf("%s",a);
insert(a);
}
for(int i=1;i<=m;i++)
{
scanf("%s",a);
cout<<query(a)<<endl;
}
return 0;
}