简单来讲就是dp。 前缀函数pi[i] 意为:以i为结尾的子字符串与原字符串的最长的公共前缀 即s[0~i] 与 s的最长公共前缀的子串的长度 即:s[0~pi[i]] 相等 s[i-pi[i]~i] 之前计算好的答案为 pi[i]。显而易见的是:如果 s[pi[i]+1] == s[i+1] 那么 pi[i] = pi[i]+1; 利用了pi[i...
n]s[i,n]与字符串ss的最长公共前缀的长度等于后缀字符串s[i,n]s[i,n]的长度,所以后缀字符串s[i,n]s[i,n]满足既是字符串ss的前缀又是字符串ss的后缀,且其长度为z[i]z[i]。