简单匹配算法
如果我们要对下面的主串P和模式串P进行匹配
步骤一:i=10,j=6
匹配失败,i 回到上一次匹配的起始位置的下一位,j=0
步骤二:i=5,j=0
由此可见,简单匹配算法存在两个问题
- i 发生了回溯(从 i=10 跳到了 i=5 )
- 没有利用到前面已匹配到的信息(ABCDAB),增加了计算量
因此,我们提出了KMP算法
KMP 算法
步骤一:当 i=10,j=6 时
已匹配的信息有相同的前后缀(如ABCDAB中,AB同时出现在前缀和后缀中),此时模式串P的前缀AB == 主串S的后缀AB(长度为2,即 next[j]=next[6]=2,PS:假设不存在相同的前后缀,则next[j]=0 ),不需要重复进行比较,那么,我们仅