Z 函数(扩展 KMP)
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Z 函数(扩展 KMP)相关的知识,希望对你有一定的参考价值。
Z 函数(扩展 KMP)
线性算法
Code
// C++ Version
vector<int> z_function(string s)
int n = (int)s.length();
vector<int> z(n);
for (int i = 1, l = 0, r = 0; i < n; ++i)
if (i <= r && z[i - l] < r - i + 1)
z[i] = z[i - l];
else
z[i] = max(0, r - i + 1);
while (i + z[i] < n && s[z[i]] == s[i + z[i]]) ++z[i];
if (i + z[i] - 1 > r) l = i, r = i + z[i] - 1;
return z;
复杂度分析
字符串整周期
以上是关于Z 函数(扩展 KMP)的主要内容,如果未能解决你的问题,请参考以下文章