Kmp中next数组含义

凑个字数

这篇分析了Kmp中next数组到底是用来干什么的。文章假定大家已经对字符串匹配算法具有初步了解。但是对kmp中的next不是很懂。如果想要研究更多。可以出门左转https://blog.youkuaiyun.com/qq_41105401/article/details/79827356这篇写的很详细。
这里写图片描述

补充个难点

为什么可以不考虑不是后缀的但跟开头能匹配的内容

学过kmp都知道,下面这个串。
目标串S:abdababxqweqwer
模式串T:abdababy
应该移动到如下
abdababxqweqwer
11111abdababy
而不是
abdababxqweqwer
111abdababy
我们发现中间那个小老弟ab虽然跟前后缀一样但是移过去后发现它是个错误的位置。这是因为目标串中间的ab到末尾是abab,但模式串开头是abda,所以移动过去后发现它俩配不上,换言之,如果中间的ab是正确的位置,的充要条件就是中间中间的ab到结尾应该等于模式串的开头。而这句话你在品品,ab到结尾是个啥,可不就是后缀吗。所以说这就证明了,如果奇迹有颜色一定是中国红,呸。如果有个🍢是正确的位置那它肯定是个跟前缀相等的后缀。所以这种前后缀是ab中间还有ab也不用担心,只管后缀就行了,因为中间那个ab如果是正确能跳转的位置,肯定会纳入后缀里面,如果没纳入,那就说明它不是。

数学逻辑

其实就是个逆否命题
因为:
if 那个位置是能匹配的位置 then 那个位置是前后缀
所以:
if 那个位置不是前后缀 then 那个位置不是能匹配的位置

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值