求兩個字串的最長公共子串行(DP實現)

2021-08-16 21:15:31 字數 567 閱讀 9481

用二維陣列c[i][j]記錄串x1x2⋯xi與y1y2⋯yj的lcs長度,則可得到狀態轉移方程

如果某乙個字串長度為0,則公共子串行長度為0;

如果字串長度都不為0,如果xi=yj,那麼公共子串行長度為兩個字元比較之前的公共子串行的長度+1;如果xi≠yj,那麼lcs的長度為前面字元比較得到的lcs的較大值。

如下面的求abca和acba的最長公共子串行得到的陣列:

最長公共子串行的長度為3.

public static int getlcs(string str1, string str2)

else if(str1.charat(i-1) == str2.charat(j-1))

else

} }

return lens;

}

求兩個字串的最長公共子串行

autor baker time 25 5 06 求兩個字串的最長公共子串行。x的乙個子串行是相應於x下標序列的乙個子串行,求解兩個序列的所有子串行中長度最大的,例如輸入 pear,peach輸出 pea。分析 次題可用動態規劃演算法解決。首先定義乙個二維陣列 a a i j m g ddgg dd...

求兩個字串的最長公共子串行

方法 一 遞迴 採用遞迴的方法,簡單,但是速度比較慢,當字串比較大的時間,多次遞迴會計算一些重複的過程,因此速度很很慢。include using namespace std int lcslength int i,int j string x,y int lenx,leny int main re...

求兩個字串的最長公共子串行

動態規劃解決lcs問題的時間複雜度為o mn 這比簡單的遞迴實現要快多了。空間複雜度是o mn 因為使用了乙個動態規劃表。兩個字串對應的最長公共子串行不一定唯一,這個程式輸出所有的lcs內容。基本思想是 具體參考文章 include include include include include i...