1. 最长公共了序列( LCS )问题
用 lcs( i, j ) 表示 X[ 1...i ] 与 Y[ 1...j ] 的最长公共子序列长度。
则:
lcs( i, j ) =
1) i == 0 or j == 0 : lcs(i, j) = 0.
2) 若 X[ i ] == Y[ j ] : lcs( i, j ) = lcs( i-1, j-1 ) + 1.
3) 若X[ i ] != Y[ j ] : lcs( i, j ) = max{ lcs( i-1 , j ) , lcs( i, j-1 ) }.
2. 最长公共子串( LCS, substring )
用lcs( i, j ) 表示X[1...i ] 与 Y[ 1...j ] 的最长公共子串长度( 子串是连续的 )。
则:
lcs( i, j ) =
1) i == 0 or j == 0: lcs( i, j ) = 0.
2) X[ i ] == Y[ j ] : lcs(i, j ) = lcs( i, j ) + 1.
3) X[ i ] != Y[ j ]: lcs( i, j ) = 0.
若X[i] == Y[j], 令 M[i][ j] = 1, 否则M[i][j] = 0, 则相当于寻找M中斜对角线为1最长长度。把斜对角线进行累加即得出最长子串的最大长度。