我找到了一个算法Longest Common Substring。通常使用dynamic programming
,使用尺寸为mxn
的2-D数组完成,其中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
现在,我寻找在1
秒的最大连续序列每个对角线在左上方到右下方向。
其中的最大值将是答案。
我可以执行上面的操作,而不明确使用数组。时间复杂度仍然是O(M*N)
。所以,不需要记忆。
任何人都可以指出我哪里错了吗?
看起来不错,我有什么理由认为这是不正确的吗? –
@PeterdeRivaz如果这是正确的,那么为什么[wikipedia](http://en.wikipedia.org/wiki/Longest_common_substring_problem)使用一种使用额外内存的算法?另外,我没有找到任何具有“O(MN)”复杂性并且没有额外内存的解决方案。 – nitish712