給定兩個字串s和t.求出這兩個字串最長的公共子串行的長度.
輸入:n=4
m=4s="abcd"
t="becd"
輸出:3("bcd")
這類問題被稱為最長公共子串行問題(lcs,longest common subsequence)的著名問題.
max(dp[i][j]+1,dp[i][j+1],dp[i+1][j]) (s=t)
dp[i+1][j+1]=
max(dp[i][j+1],dp[i+1][j]) (其他)
這個遞推式可用o(nm)計算出來,dp[n][m]就是lcs的長度.
j\i012
3400
0000
1000
0020
1111
3011
2240
1123
1intn,m;
2char
s[max],t[max];
3int dp[max][max]; //
dp陣列45
void
solve()612
else15}
16}17 printf("
%d\n
",dp[n][w]);
18 }
《挑戰程式設計競賽》讀後感
最長公共子串行(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 如果分別是兩個或多個已知序列的子...