Tire字典树

原理:将字符串以根节点出发延伸的树,查找速度块,占用空间大。

image

应用

  1. 查找字符串是否出现过
    比如查找字符串str,只需要遍历str每个字符在字典树是否出现过,若某一字符在树上无枝点即没出现过
int son[N][26],cnt[N],idx;
char str[N];
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;
    for(int i=0;str[i];i++)
    {
        int u=str[i]-'a';
        if(!son[p][u])return 0;//如果访问到一个节点是空的说明没有此字符串出现过
        p=son[p][u];
    }
    return cnt[p];
}
  1. 查找某一字符串前缀出现次数
int son[N][26],cnt[N],idx;
char str[N];
void insert()
{
    int p=0;
    for(int i=0;str[i];i++)
    {
        int &s=son[p][str[i]-'a'];
        if(!s)s=++idx;//创造新节点
        p=s;
    }
    cnt[p]++;
}
int query()
{
    int p=0,res=0;
    for(int i=0;str[i];i++)
    {
        int &s=son[p][str[i]-'a'];
        if(!s)break;//遇到空节点直接结束,后面没有答案了
        p=s;
        res+=cnt[p];//找到节点加上这个以这个节点为结束的数量
    }
    return res;//返回答案
}
posted @   snaliuu  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示