精确字符串匹配
问题的定义
想法1:暴搜
检查文本从0到n-m的所有值,失配后文本指针向后移动1位,算法的时间复杂度高
匹配失败的最好的情况:每个子串的第一个字符就与模式串不匹配
匹配失败的最坏的情况:每个子串的最后一个字符与模式串不匹配
想法2:指纹
但由于m可能很长导致指纹是一个很大的数无法存储,所以想到采用hash函数来计算指纹,两个字符串的指纹相同两个字符串不一定相同,但指纹不同字符串一定不同
Rarbin-Karp算法
想法3:文本中的每个字符仅比较一次
前面比较算法都没有应用到模式中已匹配吧部分的记忆
现在利用前缀表来存储
π
[
q
]
\pi [q]
π[q]的值
π
[
q
]
\pi[q]
π[q]表示模式中前q个字符前缀等于后缀的最大长度
KMP算法
BMH算法
-
偏移表计算
-
算法伪代码
Tries数据结构
- Trie是一种存储字符串集合的数据结构
- Trie的性质
- Trie树每个节点结构具体实现