最长公共子序列中子序列是不连续的,最长公共字串则要求子串是连续的。两者是不同的问题。最长公共子序列前面已经说了,这里只讨论最长公共子串问题。
设有A和B两个序列。c(i,j)表示以A[i]和B[j]结尾的最长字串长度,也就是i,j处的靠右最长字串。那么A和B的最长字串就是所有n*m个c(i,j)中的最大值。 当A[i]!=B[j]时:c(i,j) = 0,当A[i]=B[j]时: c(i,j)=c(i-1,j-1)+1 (补充i==0,j==0时c(i,j)=1) 这也是个子问题重叠的动态规划。