tire 字典树

tire 字典树

先来个模板

142. 前缀统计 - AcWing题库

什么是字典树呢?

就是存字典的树嘛,差不多的赶脚。

确实是将所有字符存入其中,方便查找(多是查找前缀)。怎么存捏?如下图

trie

建树

差不多是这个意思,但并非是把所有字符的空间给开出来,这就要讲到如何建树了。

void insert()
{
   
	int root = 0;
	for (int i = 0; str[i]; i ++)
	{
   
		int s = str[i] - 'a';
		if(!son[root][s]) son[root][s] = ++ idx;
		root = son[root][s];
	}
	cnt[root]++;
}

root 节点设为0。son{ root }{ s }表示root这个节点上的s的编号idx。倘若这个点没有被创建,那就 son{ root }{ s } = ++ idx; 感觉这个 root 有并查集那味儿。存储他儿子的编号,便于查找。这时候就有读者要问,这个cnt{ N }是干嘛用的呢?答案是记录以这个点为结尾的数量。在搜前缀时,不一定只有一个字符从这里结束,所以要记录一下数量。

搜索
int search()
{
   
	int root = 0, res = 0;
	for
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值