這題可用遞迴解出
(1)遞迴方法求最長公共子串行的長度
1)設有字串a[0...n],b[0...m],下面就是遞推公式。
當陣列a和b對應位置字元相同時,則直接求解下乙個位置;當不同時取兩種情況中的較大數值。
會超時
#include
char a[100000],b[100000
];int
lena,lenb;
int lcs(int i,int
j)int
main()
return0;
}view code
但是這樣子的方法會超時
接下來就是動態規劃
(2)動態規劃求最長公共子串行的長度
動態規劃採用二維陣列來標識中間計算結果,避免重複的計算來提高效率。
1)最長公共子串行的長度的動態規劃方程
設有字串a[0...n],b[0...m],下面就是遞推公式。字串a對應的是二維陣列num的行,字串b對應的是二維陣列num的列。
還寫出了乙個錯誤的**。。。
#include#includeview codeint ans[1000][1000
];int max(int a,intb)
intmain()
printf(
"%d\n
",ans[i][j]);
}return0;
}
最長公共子串行(LCS)與最長公共子串 DP
1 最長公共子串行 lcs 與最長公共子串 dp 子串應該比較好理解,至於什麼是子串行,這裡給出乙個例子 有兩個母串 比如序列bo,bg,lg在母串cnblogs與belong中都出現過並且出現順序與母串保持一致,我們將其稱為公共子串行。最長公共子串行 longest common subseque...
最長公共子串LCS
找兩個字串的最長公共子串,這個子串要求在原字串中是連續的。其實這又是乙個序貫決策問題,可以用動態規劃來求解。我們採用乙個二維矩陣來記錄中間的結果。這個二維矩陣怎麼構造呢?直接舉個例子吧 bab 和 caba 當然我們現在一眼就可以看出來最長公共子串是 ba 或 ab b a b c 0 0 0 a ...
最長公共子串(LCS)
找兩個字串的最長公共子串,這個子串要求在原字串中是連續的。其實這又是乙個序貫決策問題,可以用動態規劃來求解。我們採用乙個二維矩陣來記錄中間的結果。這個二維矩陣怎麼構造呢?直接舉個例子吧 bab 和 caba 當然我們現在一眼就可以看出來最長公共子串是 ba 或 ab b a b c 0 0 0 a ...