1 Trie树简介
Trie又称前缀树或字典树,有如下特性:
- 除根节点为空外,其每个节点都表示一个字符
- 一个节点的所有子孙都有相同的前缀
- 从根节点出发,到某一end节点,则表示一个字符串
一下是一个简单的例子:在trie树中插入多个子串[she, he, her, this, his, is]
蓝色的节点表示end节点,即从root出发到end节点表示一个子串。
当我们要查找主串sherthis,是否存在一个从首字符起前缀相同的子串时(如果是查找子串,则需要为trie加上fail指针,即AC自动机,这里不讲),我们便可以在trie上以O(n)的时间复杂度完成查找。
从上边的例子中,我们可以看到在前缀匹配中,trie拥有不俗查找效率外,还能够对公共前缀进行空间上的压缩。
Trie树主要可以应用在各种字符串前缀匹配的场景下,如搜索提示、词频统计等。
看完后依然不明白,可以手动实现一遍LeetCode208题。
2 比较
2.1 HashMap
HashMap可以在O(1)的时间复杂度和O(n)的时间复杂度内,完成对字符串的匹配。
但其只能使用在字符串精确匹配,而无法应对前缀匹配