理论基础:
说实话,我暂时只是记得公式,至于如何推导出来的---我不相信一些参考书那样拿朴素字符串匹配算法比几下然后哪一个步骤可以省略就可以得出这个公式。
说说算法,步骤,对于一个字符串:
abcmdmdmjkldlkfdfdf,
假如我们需要在里面寻找:
mdmjk
这一个字符串T,那么我们需要根绝公式算出T的next数组,然后根据next数组遍历比较,寻找匹配位置。
下面引用部分参考书籍的解析:
公式:
具体计算过程:
请注意:前缀字符串及后缀字符串的相似度决定了除了第一第二个字符的next值,前缀字符串不能包含最后一位,后缀字符串不能包含第一位,譬如:
第六步:最大前缀字符串为:abca 最大后缀字符串为:bcab假如两者相等,那么在前(后)缀字符串的长度+1为相应的next值。
第一位的next值必定为0,
其他的假如前后缀字符串都无法匹配,那么next值为1.
下面上算法。