快速的从一个主串中找出我想要的字串
- BF算法存在回溯,导致效率低。
- KMP算法仅仅后移模式串,比较指针不回溯。
箭头左边匹配,并且左边有两个字串完全匹配
称为模式串的公共前后缀。
直接往前移动模式串
使得前缀直接移动到后缀所在的位置,这样就能保证所在的串上下匹配。
当模式串不匹配时,找出X之前那段串中的公共前后缀,然后往前移动来到原来后缀的位置
那么在两个公共前后缀中间一定不存在已经匹配的字串。
最长公共前后缀:如果模式串中有多对公共前后缀,那么我们取最长的那对
模式串超出主串范围,则匹配失败
基本步骤如下:
1.左边对齐,开始扫描
2.遇到不匹配之后,找最长的公共前后缀
注:前后缀最大不要超过比较子串左边子串长度
模式串从数组下标1开始存储
假如第一个位置发生不匹配
把模式串前移一位
按之前的分析方法
让一号为的字符与主串下一个位置上的字符进行比较
二号位不匹配,那么我们找公共前缀,箭头左边的字串长度只有1,公共前缀的长度要求小于这个长度,那么公共前后缀的长度只能是0
模式串后移
同理三号位与二号位情况相同
四号位
最长公共前后缀长度位1
故