Next数组个人理解

以此字符串为例子:

i : 0 1 2 3 4 5 6 7

   a b a b a c d

  -1 0 0 1 2 3 0 0


我一般求Next数组时都会求到实际最后一个字符的下一位,因为循环节的相关题目会用的到。


1.“Next数组中第i位表示在与母串发生失配时应该跳转到的用来比较的那一位;


2.“Next数组中第i位可以表示以第i-1位为结尾的后缀串的长度;

 引申:最后一位的下一位的值可以表示最后一位为结尾的后缀串是否存在(0即不存在),并且能知道串有多长;当不断从第i位跳到第Next[i]位并取当前位置的Next数组的值的时候,可以不停地找到与后缀相匹配的子字符串(子字符串的后缀子字符串必定是子字符串的后缀),并且可以求出有多少个可以与最后一位为结尾的后缀相匹配和他们的长度。


3.“Next数组求循环节相关内容:

 (1)求循环节长度:Next[i]表示的是第i位失配时应跳转的位置,也可以表示第i-1位为结尾的后缀串长度,那么如果能跳转,i-1就可以用来表示循环节最后出现的位置,而且Next[i]-1就可以表示上一次出现的位置,做差就可以求出循环节长度,表示为i-Next[i]

 (2)求循环次数:有了循环节长度,那么就可以进行循环次数的求解,0i-1共有i个字符,i / (i - Next[i])就是循环次数。

 (3)循环判定:如果第i-1位为结尾的循环必定有 i % (i - Next[i]) == 0 .


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值