问题描述
给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence)。
X = BDCABA Y = ABCBDAB
则这两个字符串的最长公共子序列长度为4,LCS是:BCBA
解题思路
设xi是X的元素,yj是Y的元素,X = (x1, x2, …, xm),Y = (y1, y2, …, yn),最长公共子序列为Z = (z1, …, zk)
1)如果xm = yn,说明该元素一定在公共子序列中。
2)如果xm ≠ yn,说明要么xm一定不在最长公共子序列中,要么yn一定不在公共子序列中。
所以综上可以得出最长公共子序列的状态方程,dp[i][j]表示(x1,x2,…,xi)和(y1, y2,…, yj)的最长公共子序列的长度。
d p [ i ] [ j ] = { d p [ i − 1 ] [ j − 1 ] , 若 i , j > 0 , x i = y j m a x ( d p [ i − 1 ] [ j ] , d p [ i ] [ j − 1 ] ) , 若 i , j > 0 , x i ≠ y j