kmp算法(十分钟理解)

本文并不打算细说kmp算法的算法实现,而是通过几张图来描述kmp算法的思想。

现在我们将两个字符串左对齐,然后依次对比每位是否相等
https://i-blog.csdnimg.cn/blog_migrate/bb63d9b2c1775cc29a4cd22852d3b33e.png
当遇到不匹配时需要将P整体往右移动
https://i-blog.csdnimg.cn/blog_migrate/935f381599747ae9d6721984834df4c6.png
现在需要移动1位然后依次对比每位是否相等,不相等就又需要整体往右移1位。那可以每次尽可能的向右多移动几位吗?
https://i-blog.csdnimg.cn/blog_migrate/2c1ecfb35e56955500abc8489ad3ae6b.png
如果我们提前就可以算出移动几位后才会开始匹配,这样匹配就可以加速了。从上图可以看出移动两位后可以向前继续匹配的,因为此时前面的对应位子字符是相等的。
下图说明了在第6位不匹配时可以向右移2位的计算过程。
https://i-blog.csdnimg.cn/blog_migrate/69ebaa772dc853969944838b1710efd5.png
针对需要查找的字符串P我们可以算出在每一位不匹配时,可以向右移动的最远长度
https://i-blog.csdnimg.cn/blog_migrate/0206261e4b62c94419e7fdd9dac06853.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值