KMP算法有点难理解。。。

快速的从一个主串中找出我想要的字串

  1. BF算法存在回溯,导致效率低。
  2. KMP算法仅仅后移模式串,比较指针不回溯。

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

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值