问题
S
(长度Ls
)是给定的字符串。M
(of length Lm
) 是 的最大真后缀S
,也是 的前缀S
。我们要证明Ls - Lm
的是最短周期的长度S
。
矛盾证明
假设有一个周期Y
的长度Ly < Ls - Lm
(即,它比上述技术给出的周期短)。
需要注意的一个重要属性是它M
是一个适当的前缀,Y
反之亦然,具体取决于它们的长度。我们可以将其表示为M = n*Y + Z
,其中n >= 0
和Z
是附加部分 和Lz < Ly
。Z
形成 的前缀Y
,因为Y
重复。让Y = Z + W
.
考虑M
后缀。将原始字符串 S 中的前 几个字符附加到它。Ly
这不会超过字符串长度,因为 ( Ly < Ls - Lm
)。新的后缀是(n + 1)*Y + Z
.
考虑M
前缀。现在将原始字符串 S 中的下一个 字符附加到它。Ly
这里的新前缀是
M + (next Ly characters from S)
- > n*Y + Z + (Ly characters)
- > n*Y + Z + (Ly - Lz characters) + (Lz characters)
- > n*Y + (Z + W) + (Z)
{The `Ly - Lz` characters should be `W` because `Z` and these together form `Y`; The last Lz characters are actually the the first Lz characters of Y which is nothing but Z}
- > (n + 1)*Y + Z
现在我们有了一个适当的 S 后缀,它也是一个前缀并且大于M
。但是我们开始说M
最长的正确后缀也是前缀。所以这是一个矛盾,意味着这样的Y
不可能存在。