問題描述:給兩個子串行a和b,求長度最長的公共子串行,如1,5,2,6,8,7和2,3,5,6,9,8,4的最長公共子串行為5,6,8另乙個解為2,6,8求出這樣的子串行最長是多少?
狀態轉移方程:對a1,a2…ai和b1,b2,…bj
當a[i]==b[j]時,d(i,j)=d(i-1,j-1)+1
否則d(i,j) = max
具體實現的時候要注意i,j從0開始時不要陣列越界,那麼可以用d(i+1,j+1)=d(i,j)+1的方式來防止或者從i=1,j=1開始遍歷,反正d的初始值為0.
//#include
#include
#include
#include
using
namespace
std;
const
int maxn = 1005;
int dp[maxn][maxn];
int main()
cout
<< dp[a.length()][b.length()] 一 問題描述 如果字串一的所有字元按其在字串中的順序出現在另外乙個字串二中,則字串一稱之為字串二的子串。注意,並不要求子串 字串一 的字元必須連續出現在字串二中。請編寫乙個函式,輸入兩個字串,求它們的最長公共子串,並列印出最長公共子串。例如 輸入兩個字串bdcaba和abcbdab,字串bcba和b... 找兩個字串的最長公共子串,這個子串要求在原字串中是連續的。其實這又是乙個序貫決策問題,可以用動態規劃來求解。我們採用乙個二維矩陣來記錄中間的結果。這個二維矩陣怎麼構造呢?直接舉個例子吧 bab 和 caba 當然我們現在一眼就可以看出來最長公共子串是 ba 或 ab b a b c 0 0 0 a ... 找兩個字串的最長公共子串,這個子串要求在原字串中是連續的。其實這又是乙個序貫決策問題,可以用動態規劃來求解。我們採用乙個二維矩陣來記錄中間的結果。這個二維矩陣怎麼構造呢?直接舉個例子吧 bab 和 caba 當然我們現在一眼就可以看出來最長公共子串是 ba 或 ab b a b c 0 0 0 a ...LCS演算法求最長公共子串
最長公共子串LCS
最長公共子串(LCS)