【字符串】Trie字典树

Trie字典树

目录

Trie字典树

例题

1.什么是字典树?

2.字典树的作用及性质

3.建树

 

Code:

效果图:

4.查询

Code:

5.优势

6.回到例题

Code:

7.结束语

8.练习:


例题

给出n个字符串,以及m个询问。每次询问读入一个字符串,求该字符串是多少个字符串的前缀 
每个字符串长度小于10^2,n和m小于10^5。

【样例输入】

anan 
amn 
aman 
anann 

ana 
ama 
a

【样例输出】


4

朴素算法:暴力搜索,对于每个询问,把所有的n个字符串搜索一遍,统计答案。时间复杂度大于10^10。显然,这样时间是非常大的。

如果要优化时间的话,我们就可以使用字典树

1.什么是字典树?

字典树,又叫做Trie树,顾名思义,首先它必须得是一棵树。 
**而且它是用来储存字符串的!!!** 就像一本字典一样,里面什么都有(只要你存了)
它的根节点为空,其余每个节点代表一个字符。从根节点开始,沿着一定的路径,加上沿途遇到的字符,到达每个节点,都能得到对应的一个字符串。

2.字典树的作用及性质


字典树的作用
1、可以判断一个字符串之前是否出现过。
2、可以判断当前这个字符串是多少个字符串的前缀。
3、等等等等......
其实大概就这些了,具体应用就要靠读者自己去思考了。

字典树的性质
1、沿着字典树一直走,如果经过一个被标记的点,那么从根节点到当前这个节点所经过的所有字符组成的字符串一定出现过,也就是说如果一个没有出现过的字符串在字典树上是走不出来的。
2、不论沿着字典树怎么走,都不会走到两个被标记的不同的点,使得它们沿途经过的点是完全相同的,意思就是说相同的字符串在字典树里面只会出现一次。

3.建树

 

设trie[i].to[c]表示字典树中编号i节点的儿子中,字符c的儿子的

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值