這是一道求公共最長子序列的題,首先要區別子串行與字串。子串行是可以不連續的,而字串一定是連續的。
思路:動態規劃 二維圖
例子:
輸入兩個字串s1,s2,cin就可以解決,之後進行動態規劃。如圖建立dp二維陣列來記錄。當比較到字元相同時,dp[i][j]這個位置的數是取dp[i-1][j] dp[i][j] dp[i][j-1]當中的最大值。而dp[i][j]的數由dp[i-1][j-1]得到。注意對角線對角線就是字串。
1 首先解釋dp[i][j] = dp[i-1][j-1] + 1 如圖a = a,b=b時ab = ab最長就是2 對角線正好對應著兩個字串相同位置上的字元
2 dp[i-1][j]是當s1為abfc時,s2為abc時來相互比較,此時子串行為3
3dp[i][j-1]是當s1為abf時,s2為abcf時來相互比較,此時子串行為3
**:#include
#include
#include
using namespace std;
int f(int a,int b,int c)
int dp[1001][1001];
string s1,s2;
int main()
{int l1,l2;
while(cin>>s1>>s2)
{memset(dp,0,sizeof(dp));
l1 = s1.length();
l2 = s2.length();
for(int i=0;i
求公共最長子序列
最長公共子串行的問題常用於解決字串的相似度,是乙個非常實用的演算法,作為碼農,此演算法是我們的必備基本功。二 概念 舉個例子,cnblogs 這個字串中子序列有多少個呢?很顯然有2 7個,比如其中的cb,cgs等等都是其子序列,我們可以看出 子串行不見得一定是連續的,連續的那是子串。在你找出的公共子...
動態規劃 最長子序列
引出 問題描述 給出乙個序列a1,a2,a3,a4,a5,a6,a7 an,求它的乙個子串行 設為s1,s2,sn 使得這個子串行滿足這樣的性質,s1分析 這題目是經典的dp題目,也可叫作最長上公升子串行或者 最長不下降子串行。有兩種演算法,複雜度分別為o n logn 和o n 2 演算法1 時間...
動態規劃 最長子序列
引出 問題描述 給出乙個序列a1,a2,a3,a4,a5,a6,a7 an,求它的乙個子串行 設為s1,s2,sn 使得這個子串行滿足這樣的性質,s1分析 這題目是經典的dp題目,也可叫作最長上公升子串行或者 最長不下降子串行。有兩種演算法,複雜度分別為o n logn 和o n 2 演算法1 時間...