kmp——return解算解析

kmp算法

就是有关字符串匹配的一种简便算法。
难点就是对子串(比较串)return[]数组的计算。
s为主串,t为字串,i为主串比较的第i位,j为子串比较的第j位
在这里插入图片描述

比较串(子串)return数组的计算方法

一开始,我很摸不着头脑,对这个式子。
return数组的计算方法
例子:abaabcac
头两位必然是0和1;则有
a b a a b c a c
0 1 ? ? ? ? ? ?
然后对第三位进行分析
因为前两位是ab,a!=b,则return[3]=0+1=1
a b a a b c a c
0 1 1 ? ? ? ? ?

第四位
前三位是aba,a==a,(只有一个字符相同)则return[4]=1+1=2
a b a a b c a c
0 1 1 2 ? ? ? ?

第五位
前四位是abaa,a==a,(只有一个字符相同)则return[5]=1+1=2;
a b a a b c a c
0 1 1 2 2 ? ? ?

第六位
前五位是abaab,ab=ab,(有两个字符相同)则return[6]=2+1=3;
a b a a b c a c
0 1 1 2 2 3 ? ?

第七位
前六位是abaabc,a!=c,return[7]=0+1=1
a b a a b c a c
0 1 1 2 2 3 1 ?

前八位是abaabca,a==a,return[8]=1+1=2
a b a a b c a c
0 1 1 2 2 3 1 2

所以字串的return数组就是0 1 1 2 2 3 1 2。

参考了许多,如侵权就删。

next[j]表示的是对比字符串的下一个对比位置。

有视频:https://www.bilibili.com/video/av39191654?from=search&seid=17016927365116145147

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值