求最长公共子串和求最长公共子序列相似,也是用DP算法中填写矩阵的形式求解,但是为了在填写矩阵后不遍历整个矩阵就能得到最大值,可以在矩阵是填1时让它等于其左上角元素加1。最大元素的横坐标或者纵坐标就是对应的最大公共子串在原字串中的下标。
b a b
c 0 0 0
a 0 1 0
b 1 0 2
a 0 2 0
这样时间复杂度为O(n2),空间复杂度为O(n2)
由于下一行矩阵的值只与上一行的左边的值有关,所以只需要一个数组即可完成整个矩阵的填充,而且从后往前进行更新,空间复杂度为O(n)。
参考博客