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)的主要内容,如果未能解决你的问题,请参考以下文章

Z函数(扩展KMP)学习笔记

扩展KMP(Z函数),线性LCP

扩展KMP模板

126B Password[扩展kmp学习]

hdu 4333 扩展kmp+kmp重复字串去重

kuangbin专题十六 KMP&&扩展KMP HDU3068 最长回文