动态规划之两个字符串的最大子序列
生活随笔
收集整理的這篇文章主要介紹了
动态规划之两个字符串的最大子序列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、問題
求兩個字符串的最大子序列
1)、子序列和子字符串有區別,子字符串(子串)必須連續,列如
s1 = "ABCDAB" s2= "BBCDAAB"
s1和s2最大子序列有"BCDA","BCDB", "CDAB","ABAB","BCAB"...,子序列BCDA是s1和s2的一個LCS
s1和s2最大子字符串是"BCDA"
2、分析
為了找到最長的LCS,我們定義c[i][j]記錄序列LCS的長度,公共子序列LCS長度為0,即c[i][j]=0,所以用i和j分別表示序列s1的長度和序列s2的長度,狀態轉移方程為
c[i][j] = 0 如果i=0或j=0c[i][j] = c[i-1][j-1] + 1 如果s1[i-1] = s2[j-1]c[i][j] = max{ c[i-1][j], c[i][j-1] } 如果s1[i-1] != s2[j-1]我們用一個新的數組C表示新LCS的數組,然后用數組B表示存儲位置(值為1的時候表示C數組放的是左上角的數據加一,值為2的時候表示C數組放的左邊的數據,值為3的時候,表示C數組放的上面的數據)
比如字符串s1 = "ABCADAB", s2 = "BACDBA"
總結
以上是生活随笔為你收集整理的动态规划之两个字符串的最大子序列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android之解决java.lang.
- 下一篇: 动态规划之编辑距离