数据结构-字典树(Tire树)

Tire树是一种利用前缀用来高效的存储和查询字符串的数据结构

适用条件

需要存储大量字符串,字符串中包含的字符种类较少,并且前缀类似。

要点

每个字符串结尾要打标记,root为空节点。

模板(数组实现)


final static int N = 100010;
 
String str;
int[][] son=  new int[N][26];
int[] cnt = new int[N];
int idx = 0;
//son表示编号为N的节点的子节点们的编号
//cnt表示以编号为N的节点结尾的字符串在集合中出现的个数
//(注意以编号为N的节点结尾的字符串的遍历路径唯一)
//idx表示当前正在操作的节点编号
 
public void insert(String str)//也可传 
{
    int p = 0;//0既为头结点,又为空节点(类似线索二叉树)
    
    for (int i = 0; i < str.length(); i ++ )
    {
        int u = str[i] - 'a';//获取字符映射后的编号0~25
        if (!son[p][u]) son[p][u] = ++ idx;
        //表示p下面连接了一个u(映射后)的子节点,编号为idx
        p = son[p][u];//向下移动,重新将子节点作为根节点
    }
    
    cnt[p] ++ ;//以编号p为尾节点的字符串只有一个
}
 
public int query(String str)
{
    int p = 0;
    
    for (int i = 0; i < str.length(); i ++ )
    {
        int u = str[i] - 'a';
        if (!son[p][u]) return 0;//没找到该字符串,返回0
        p = son[p][u];
    }
    //循环结束后,说明存在以编号p为尾节点的字符串
    return cnt[p];
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值