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

2021-08-22 17:52:47 字數 1925 閱讀 1803

動態規劃解決lcs問題的時間複雜度為o(mn),這比簡單的遞迴實現要快多了。空間複雜度是o(mn),因為使用了乙個動態規劃表。

兩個字串對應的最長公共子串行不一定唯一,這個程式輸出所有的lcs內容。

基本思想是:

具體參考文章:

#include #include #include #include #include #include #include #include using namespace std;

setall_lcs; //注意這裡要用set去除重複的lcs

//最長公共子串(lcs)

//二維陣列veca[i][j]記錄的是兩個字串xi和yj的lcs長度

int lcs_length(const string &str1, const string &str2, vector> &veca)

for (j = 0; j <= str2.length(); j++)

for (i = 1; i <= str1.length(); i++)

else

} }return veca[str1.length()][str2.length()];

}//該函式找出所有的lcs的序列,並將其存在vector中

如圖所示的兩個字串共有三個lcs。

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

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...

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

解題分析 設兩個序列x y 用lsc x,y 表示最長公共子串行。1.如果xn yn。則該元素一定存在於公共子串行中,所以可化為尋求子問題lsc x 1,y 1 用公式可表示為lsc x,y lsc x 1,y 1 1。2.如果xn yn。則該元素不存在於公共子串行中,所以轉而去尋求兩個子問題,即l...