[KMP]

        了解 KMP 的原理后可以得知,我们每次都是在找到最后一个不匹配的字符就会移动。(移动j个长度) 已知第 j 个字符不匹配,那么前 0 到 j-1 个字符都是匹配的,0 到 j-1 个字符正好是 j 个,恰好是前缀的长度。(为什么要移动j个长度呢?因为前j个匹配,第j个不匹配,在进行后移的过程中文本串和模式串的匹配长度都不会大于j,因为在第j个位置对于模式串来说已经断开了,故要从这个不匹配的位置之后开始,如何找到这个位置如何进行移动就是KMP)此时我们只要记录下最大的 j 即可。

        注意next是找的模式串不是主串。

        next信息的另外一个作用:如果当前匹配失败了,取出失败位置的next信息值记为x,下一次匹配就直接跳到x位置的字符再重新进行比较,这不就是相当于把s2往前推的效果吗?这也是为什么求next信息时,规定任何字符串,0位置的next信息为-1。想象一下,当配置串跳着跳着,某一刻你的next信息值小于0了,你就知道不能再往前跳了,也就代表着较长串在这个区间内已经是不可能配出我了,较长串你该重新换个开头了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值