字符串—— 前缀统计(trie树)

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;
}
经验分享 程序员 微信小程序 职场和发展