【发布时间】:2014-02-27 13:40:13
【问题描述】:
我找到了Longest Common Substring 的算法。通常使用dynamic programming 完成,使用大小为mxn 的二维数组,其中m 和n 是所考虑的两个字符串的长度。
我将为这两个字符串构造以下矩阵。
M[i][j] = 1 if s1[i]==s2[j] else 0.
例如,如果字符串是:abcxy 和 pqaabx
矩阵如下:
a b c x y
p 0 0 0 0 0
q 0 0 0 0 0
a 1 0 0 0 0
a 1 0 0 0 0
b 0 1 0 0 0
x 0 0 0 1 0
现在,我在从左上到右下方向的每个对角线中搜索1s 的最大连续序列。
其中的最大值就是答案。
我可以在不显式使用数组的情况下执行上述操作。时间复杂度仍然是O(M*N)。所以,不需要内存。
谁能指出我哪里出错了?
【问题讨论】:
-
我觉得不错 - 你有什么理由认为这不正确吗?
-
@PeterdeRivaz 如果这是正确的,那么为什么wikipedia 使用使用额外内存的算法?我也没有找到任何具有
O(MN)复杂性且没有额外内存的解决方案。
标签: algorithm longest-substring