我们设 表示 KMP 中求得的next数组,其中
表示
前面的字串所对应的最长公共前后缀,字符串为
,长度为
,下标从 1 开始,同时设
表示这个字符串的最小循环节,于是得到如下结论:
下面是证明:
1.首先我们假设 即
,令
,注意到
。通过公共前后缀我们知道对任意
有:
所以由上我们证得 为一个循环节。
2.再次我们假设 完全由
个相同的块
拼接而成,且
(整倍重复)。我们考虑长度为
的前缀和后缀:
- 前缀
等于
(即
个
连续)
- 后缀
也是
由上说明存在一个公共前后缀长度至少为 , 于是
由第一点我们得知对于任意一个公共前后缀长度 都会产生一个周期
, 如果存在更大的公共前后缀(即
) , 则对应的周期
会满足
, 但是
已经是我们假设的最小循环节,这与我们假设矛盾。因此不能有更大的公共前后缀了所以
我们把上述两点合并后我们得到:
- 若
, 令
则
是一个周期.
- 若又满足
, 那么字符串可以被整除成若干段长度为
的块,且这个一定为最小周期(否则存在更小周期会导致更大的公共前后缀,这与我们定义的
数组冲突)。
453

被折叠的 条评论
为什么被折叠?



