KMP总结

网上有很多讲得好的博客,这里简单说一下原理和实现过程就行了。

原理就是当出现一个字符不匹配时,将当前最长相同前缀移上来,例

.......Aa......

  Bc...Bb..

       Bc...Bb..

假设A串与B串相同,可是a与b不匹配,那么如果这是我们一个一个移的话就会很慢,所以我们可以考虑预处理出一个最长的前缀与后缀相同,这时我们只需把Bc移上来,比较a与c是否相同就行了。

那么我们需要预处理出一个next数组,表示最长的相同前缀与后缀。

首先,若没有最长的前缀与后缀,那么next[i]=-1,每一次求next[i]时,先令k=next[i-1],然后每次比较a[k+1]与a[i],若相同则next[i]=k+1,若不同则k=next[k]继续比较。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值