我正在使用后缀数组读取两个字符串之间的Longest Common子字符串。我编写了一个程序来开发O(N)复杂度的字符串后缀数组。
现在我想修改程序,找到两个字符串中所有最常见的子串。如何做。
示例:
Let S1=xyzabc S2=abcxyz then here answer is length of Longest common sub string is 3 and {"abc","xyz"}
请帮助 (假设我在数组SA []中找到了后缀数组)
void kasaiLCP () {
for (int i = 0; i < str.length(); ++i) c [SA [i]] = i;
LCP [0] = 0;
for (int i = 0, h = 0; i < str.length(); ++i) if (c[i] > 0) {
int j = SA [c [i] - 1];
while (i + h < str.length() && j + h < str.length() && str [i + h] == str [j + h]) ++h;
LCP [c [i]] = h;
if (h > 0) --h;
}
}
这个LCP实现是否正确?我的后缀数组是0索引的。
对于S1 = abcabc,S2 = bc。 我的后缀数组SA [] = [6,3,0,7,4,1,8,5,2]
LCP数组= [0,0,3,0,2,2,0,1,1]
这是对的吗?