動態規劃之兩個字串的最大子串行

2021-08-17 12:36:54 字數 599 閱讀 3652

求兩個字串的最大子串行

1)、子串行和子字串有區別,子字串(子串)必須連續,列如

s1 = "abcdab"  s2= "bbcdaab"

s1和s2最大子串行有"bcda","bcdb", "cdab","abab","bcab"...,子串行bcda是s1和s2的乙個lcs

s1和s2最大子字串是"bcda"

為了找到最長的lcs,我們定義c[i][j]記錄序列lcs的長度,公共子串行lcs長度為0,即c[i][j]=0,所以用i和j分別表示序列s1的長度和序列s2的長度,狀態轉移方程為

c[i][j] = 0  如果i=0或j=0

c[i][j] = c[i-1][j-1] + 1 如果s1[i-1] = s2[j-1]

c[i][j] = max 如果s1[i-1] != s2[j-1]

我們用乙個新的陣列c表示新lcs的陣列,然後用陣列b表示儲存位置(值為1的時候表示c陣列放的是左上角的資料加一,值為2的時候表示c陣列放的左邊的資料,值為3的時候,表示c陣列放的上面的資料)

比如字串s1 = "abcadab", s2 = "bacdba"

兩個字串的編輯距離 動態規劃

字串的編輯距離,又稱為levenshtein距離,由俄羅斯的數學家vladimir levenshtein在1965年提出。是指利用字元操作,把字串a轉換成字串b所需要的最少運算元。其中,字元操作包括 1 刪除乙個字元 2 插入乙個字元 3 修改乙個字元 3 如果不一樣,那麼必定要經過一次操作 編輯...

連線兩個字串

include include void main char lianjie char a 30 char b 30 原型 extern char strcat char dest,char src 用法 include 功能 把src所指字串新增到dest結尾處 覆蓋dest結尾處的 0 並新增 ...

交換兩個字串

交換兩個字串,原來的字串分別為 學生 和 好 字串輸出顯示為 學生好 交換後輸出顯示為 好學生 include using namespace std int main char c1 5 學生 char c2 3 好 char m,n,t m c1 n c2 cout 交換前 m n n t co...