Trie字典树
目录
例题
给出n个字符串,以及m个询问。每次询问读入一个字符串,求该字符串是多少个字符串的前缀
每个字符串长度小于10^2,n和m小于10^5。
【样例输入】
4
anan
amn
aman
anann
3
ana
ama
a
【样例输出】
2
1
4
朴素算法:暴力搜索,对于每个询问,把所有的n个字符串搜索一遍,统计答案。时间复杂度大于10^10。显然,这样时间是非常大的。
如果要优化时间的话,我们就可以使用字典树。
1.什么是字典树?
字典树,又叫做Trie树,顾名思义,首先它必须得是一棵树。
**而且它是用来储存字符串的!!!** 就像一本字典一样,里面什么都有(只要你存了)
它的根节点为空,其余每个节点代表一个字符。从根节点开始,沿着一定的路径,加上沿途遇到的字符,到达每个节点,都能得到对应的一个字符串。
2.字典树的作用及性质
字典树的作用
1、可以判断一个字符串之前是否出现过。
2、可以判断当前这个字符串是多少个字符串的前缀。
3、等等等等......
其实大概就这些了,具体应用就要靠读者自己去思考了。
字典树的性质
1、沿着字典树一直走,如果经过一个被标记的点,那么从根节点到当前这个节点所经过的所有字符组成的字符串一定出现过,也就是说如果一个没有出现过的字符串在字典树上是走不出来的。
2、不论沿着字典树怎么走,都不会走到两个被标记的不同的点,使得它们沿途经过的点是完全相同的,意思就是说相同的字符串在字典树里面只会出现一次。
3.建树
设trie[i].to[c]表示字典树中编号i节点的儿子中,字符c的儿子的