线性结构---KMP模式匹配算法

【2014下半年】

在字符串的KMP模式匹配算法中,需先求解模式串的next函数值,其定义如下式所示,j表示模式串中字符的序号(从1开始)。若模式串p为“abaac”,则其next函数值为(60)

A.01234  B.01122  C.01211  D.01111

【解析】

对于此类题目我看过一些官方给的标准答案,给人的感觉是一脸懵逼而且还不详细,为此我看了下KMP模式匹配算法的原理以及网上一些参考资料总结出做此类题目的小技巧如下:

求解next [ j ] 值的思路
j-1对应的串与next[ j-1]对应的串进行比较,若相等,则next[ j ]=next[j-1]+1若不相等,则将j-1对应的串与next[ next [ j-1 ] ]对应的串进行比较,循环直到相等或与next[ 1 ]比较,若都不等,则为next函数中的其他情况。

可能你考到这里还是不懂什么意思接下来我们通过我的求解步骤来帮助大家理解。

首先我们看题目中所需要求的条件“abaac”,然后对照图示的规则获取有用的条件

因为abaac长度为5所以我们一位位长度讨论

①当j=1,next[1]=0

②当j=2,1<k<2,无法找到满足的k,所以属于其他情况next[2]=1

③当j=3,按照上述解题思路需要将第二位的模式串b(对应的next[2]=1)与它的next[2]的值(也就是第一位模式串a)作比较,因为b!=a,又因为第一位已经是最开始位置所以前面没有比较的模式串所以为其他情况next[3]=1

④当j=4,第三位的模式串a(对应的next[3]=1)与next[3]的值对应的模式串a作比较,因为a=a,所以next[4]=next[3]+1=2

⑤当j=5,第四位的模式串a(对应的next[4]=2)与next[4]的值对应的模式串也就是第二位模式串b作比较,因为b!=a,所以我们将第四位模式串与第一位模式串a作比较因为a=a,所以next[5]=next[4]+next[12+0=2

 

综上结果为:01122

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值