前言:前段时间看到公司的游戏使用的暴力遍历的方法去实现游戏的屏蔽字算法,后续发现这种算法的效率比较低下,所以在网上百度了相关资料,了解了trie树,所以现在用trie树去实现一个屏蔽字算法。
trie树的构建原理:trie 树也称为字典树、单词查找树,最大的特点就是共享字符串的公共前缀来达到节省空间的目的了。例如,字符串 "abc"和"abd"构成的 trie 树如下:
trie 树的根节点不存任何数据,每整个个分支代表一个完整的字符串。像 abc 和 abd 有公共前缀 ab,所以我们可以共享节点 ab。如果再插入 abf,则变成这样:
如果我再插入 bc,则是这样(bc 和其他三个字符串没有公共前缀)
每个分支的内部可能也含有完整的字符串,所以我们可以对于那些是某个字符串结尾的节点做一个标记,例如 abc, abd,abf 都包含了字符串 ab,所以我们可以在节点 b 这里做一个标记。如下(我用红色作为标记):
现在我们来看看trie树的查找原理:我们先用:"de", "bca", "bcf" 建立一颗 trie 树,如下: