[KMP算法]蛮力法求next[]与“省力”法求next[]

KMP算法可用于“串匹配”问题。

用单纯的蛮力法进行串匹配的时候,只是在无脑回溯待匹配串与模式串(详细的不说了),当然这也是解决“串匹配”问题时最直接的想法

但KMP算法的思想,却省去了待匹配串与模式串的回溯,遇到不匹配的字符,模式串选择的是向后移动(其实效果等同于模式串当前不匹配字符的下标回溯到前面的某个位置),从而缩短了时间复杂度。

KMP算法之所以减少了时间复杂度,关键在于之前对于模式串有效的分析,找到模式串中“隔三差五”出现的相同字符或子串,并将其记录到next[]中,一旦遇到不匹配的字符,则将模式串向后移动到上一次出现相同的字符或字符串的位置。(更详细的解说其他人的博客中有,下面是链接KMP算法

我这里重点记录一下2种求next[]数组的方法(怕以后自己忘了……)

next[]数组中记录的是模式串中在位置i处相等的前缀与后缀的长度

例如"abcab",next[0]代表子串"a",next[1]代表子串"ab",next[2]代表"abc",next[3]代表"abca",next[4]代表"abcab"

a,只有一个字符,不存在前缀与后缀之分,因此next[0] = 0;

ab,前缀{a},后缀{b},不存在相等的前后缀,因此next[1] = 0;

abc,前缀{a,ab}&#

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值