答?長度m
長度是n
他們最長的公共序列是3,2,5。
我們使用LCS(xi,yj)來表示Xi和yj的最長公共子序列的長度。
然後當xi =勇軍時,我們可以將xi和勇軍都向前移動以進行探索。
即LCS(Xi,yj)= LCS(Xi-1,yj-1)+1。
如果它們不相等,要麽將X向前移動壹步,要麽將Y向前移動壹步,看誰更大。
也就是說,LCS(Xi,yj)=馬克斯(LCS(Xi-1,yj),LCS(Xi,yj-1))
綜上所述如果xi == yj:
LCS(Xi,yj)= LCS(Xi-1,yj-1)+1
否則:
?LCS(Xi,yj)=馬克斯(LCS(Xi-1,yj),LCS(Xi,yj-1))
最長的子序列是什麽?
那麽讓我們回到源頭。
i = m-1,j = n-1
s =““
當我& gt= 0且j & gt= 0: ?#只要其中壹個為0就停止
如果xi == yj:
xi
否則:
如果LCS(Xi-1,yj)》LCS(Xi yj-1):
i -= 1
?否則:
j?-= 1
返回s【:::-1】
如果這是壹個連續的子問題。
讓我們改變思路,我們的重點應該是連續性。
事實上,如果妳畫壹個m*n的矩陣,這些連續的對角線上只有值,並且值是遞增的。
因此,我們可以用壹個不同角度的dp方程來表示。
DP【I】【j】= 0?如果i == 0?然後呢。j?==?0
DP【I】【j】= DP【I-1】【j-1?+?1 ?xi == yj
DP【I】【j】?=?0 xi!= yj