【发布时间】:2013-08-29 21:34:02
【问题描述】:
KMP 和 Z 算法是众所周知的字符串搜索算法,
KMP 算法通过定义为(pat 是搜索模式)的 KMP 失效函数来查找模式
lps[i] = pat[0..i] 的最长专有前缀,它也是 pat[0..i] 的后缀。
例如对于string "abcab",它将是[0, 0, 0, 1, 2]
Z 算法使用 z 函数定义为:
给定一个长度为 n 的字符串 S,Z 算法生成一个数组 Z,其中 Z[i] 是从 pat[i] 开始的最长子字符串的长度,它也是 pat 的前缀。
现在的问题是我们可以通过KMP算法实现Z功能吗?
我正在寻找的是对 lps 数组的一些修改,这些修改会导致与 Z[i] 数组相同的结果。
【问题讨论】: