输入:
有一个长字符串S
,我们有一个整数数组,A
它表示字符串的前缀,S
如A[i]
表示前缀S[0..A[i]]
输出:
返回一个与和的最长匹配后缀的长度Output[]
相同大小的数组A
Output[i]
S[0..A[i]]
S
样本输入:
S = "ababa"
A[]=[0, 1, 2, 3, 4]
样本输出:
Output[]=[1,0,3,0,5]
我拥有的最幼稚的算法是每个字符串都A[i]
匹配两个字符串末尾S[0..A[i]]
之间的字符数。S
但是这个算法是O(n^2)
其中 n 是原始字符串 S 的长度。
问题:
有没有更好的算法对字符串 S 进行预处理,然后可以快速返回整个输入 Array 的最长长度后缀?