字符串下标从 \(1\) 开始。
结论 1:若 \(p,q\) 是字符串 \(s\) 的周期,且 \(p+q\leq |s|+\gcd(p,q)\),则 \(\gcd(p,q)\) 也是 \(s\) 的周期。(Periodicity Lemma)
证明:
感觉类比成跳跃会好思考一些?首先假设 \(p<q\)。
对于 \(p<i\leq |s|\) 的 \(i\),先向左跳 \(p\) 再向右跳 \(q\) 即可得到 \(q-p\) 是 \(s[p+1:|s|]\) 的周期。同理可得 \(q-p\) 是 \(s[1:|s|-p]\) 的周期。
所以 \(q-p\) 是 \(s\) 长度为 \(|s|-p\) 的前后缀的周期。
此时变成了另外一个子问题,可以通过归纳证明得 \(\gcd(p,q)\) 是 \(s\) 的长度为 \(|s|-p\) 的前后缀的周期。
因为 \(p<q\),所以 \(\gcd(p,q)\leq \min(p,\frac {q}{2})\)。
此时若得到 \(2p\leq |s|\),则可以通过整体移位,即 \(s[1:p]=s[p+1:2p]\) 且 \(\gcd(p,q)\vert p\) 来得证。
因为 \(p+\gcd(p,q)\leq q\),所以得到 \(p+q\geq 2p+\gcd(p,q)\)。
假设 \(p>\frac {|s|}{2}\),则有 \(2p+\gcd(p,q)>|s|+\gcd(p,q)\),与前提 \(p+q\leq |s|+\gcd(p,q)\) 相矛盾,所以得证 \(2p\leq |s|\)。
结论 2:若字符串 \(u,v\) 满足 \(2|u|\geq |v|\),则 \(u\) 在 \(v\) 中的所有匹配位置形成一个等差数列。
证明:
还不会。。。