我找到了一個算法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