KMP
和Z
算法是众所周知的字符串搜索算法,
KMP
算法处理通过定义为(pat
作为搜索模式)的 KMP 失效函数来查找模式
lps[i] = pat[0..i] 的最长专有前缀,它也是 pat[0..i] 的后缀。
例如因为string "abcab"
它会是[0, 0, 0, 1, 2]
其中 asZ
算法使用定义为的 z 函数:
给定一个长度为 n 的字符串 S,Z 算法生成一个数组 Z,其中 Z[i] 是从 pat[i] 开始的最长子字符串的长度,它也是 pat 的前缀。
现在的问题是我们可以Z
通过使用KMP
算法来实现这个功能吗?我正在搜索的是lps
数组中的一些修改,这些修改导致与数组相同的结果Z[i]
。