給出兩個字串a b,求a與b的最長公共子串行(子串行不要求是連續的)。
比如兩個串為:
abcicba
abdkscab
ab是兩個串的子串行,abc也是,abca也是,其中abca是這兩個字串最長的子串行。 輸入
第1行:字串a
第2行:字串b
(a,b的長度 <= 1000)
輸出輸出最長的子串行,如果有多個,隨意輸出1個。
輸入示例
abcicba
abdkscab
輸出示例
abca
解題思路:套用的lcs的模板。
#include#include#include#includeusing namespace std;
int main()
;//0 i=0 || j=0
for (int i = 1 ; i <= l1 ; i++) }
//回溯求lcs
int pos1 = l1;
int pos2 = l2;
stacks;
while (pos1 > 0 && pos2 > 0)
else if (dp[pos1-1][pos2] > dp[pos1][pos2-1])
pos1--;
else
pos2--;
} while (!s.empty())
// printf ("%d\n",dp[l1][l2]);
return 0;
}
最長公共子串行(LCS)問題
問題描述 見演算法導論p208 p209 前提概念 給定乙個序列x x1,x2,xm 對i 0,1,m,記x的第i個字首為xi x1,x2,xi 故xm x,而x0是個空序列 乙個給定序列的子串行就是該序列去掉0個或多個元素 不一定連續 如bcdb是abcbdab的乙個子串行 基於以上定義,最長公共...
最長公共子串行問題LCS
乙個給定序列的子串行是指在原序列順序不變的基礎上刪去若干元素後得到的序列。給定兩個序列x和y,當乙個序列z既是x的子串行又是y的子串行時,稱z序列為x和y 的公共子串行。例如,x a,b,c,b,d,a,b y b,d,c,a,b,a 則序列 b,c,a 是x和y的乙個公共子串行,但不是x和y的最長...
最長公共子串行 LCS 問題
前言 學習過的知識,只要不經常使用就會忘記,所以在此寫部落格,記錄下來,方便自己,也可能有利於他人。最長公共子串行 lcs 問題。1.什麼是最長公共子串行?最長公共子串行,英文縮寫為lcs longest common subsequence 其定義是,乙個序列 s 如果分別是兩個或多個已知序列的子...