最常见的子串修改

时间:2014-03-12 03:59:55

标签: c++ algorithm

我正在使用后缀数组读取两个字符串之间的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]

这是对的吗?

0 个答案:

没有答案