小白高階之動態規劃 最長公共子串行

2021-07-14 03:06:04 字數 838 閱讀 9614

問題描述:

給定兩個序列x=(x1,x2,...,xm)和y=(y1,y2,...,yn),z=(z1,z2,...,zx)為x 和y的任意最長公共子串行(lcs),c[i,j]表示xi和yj的lcs的長度,b[i,j]指向表項對應計算c[i,j]時所選的子問題的最優解。

子問題分解如下:

(1)若xm=yn,則zk=xm=yn且zk-1是xm-1和yn-1的乙個lcs;

(2)若xm!=yn,則zk!=xm意味著z是xm-1和y的乙個lcs;

(3)若xm!=yn,則zk!=yn意味著z是x和yn-1的乙個lcs。

下面是原始碼:

lcs.h

#include#includevoid lcslength(char *x,char *y,int m,int n,int **c);

void printlcs(int **c,char *x,int i,int j);

lcs.cpp

#include"lcs.h"

void lcslength(char *x,char *y,int m,int n,int **c)

else

}}void printlcs(int **c,char *x,int i,int j)

else if(c[i+1][j+1]==c[i][j+1])

else

printlcs(c,x,i,j-1);

}

main.cpp

#include"lcs.h"

int main()

y=最長公共子串行為:b,c,b,a

最長公共子串 最長公共子串 動態規劃

有兩個字串 可能包含空格 請找出其中最長的公共連續子串,輸出其長度。長度在1000以內 例如 輸入 abcde bcd 輸出 3 1 把兩個字串分別以行和列組成乙個二維矩陣。2 比較二維矩陣中每個點對應行列字元中否相等,相等的話值設定為1,否則設定為0。3 通過查詢出值為1的最長對角線就能找到最長公...

最長公共子串(動態規劃)

描述 計算兩個字串的最大公共子串 longest common substring 的長度,字元不區分大小寫。輸入 輸入兩個字串 輸出 輸出乙個整數 樣例輸入 asdfas werasdfaswer樣例輸出 6 參考 這裡的最大公共字串要求的字串是連續的。求字串的方法和求子序列方法類似 當s i t...

最長公共子串 動態規劃

題目 給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為1000。示例 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。思想 動態規劃 步驟 第一步 確定子問題。在這一步重點是分析那些變數是隨著問題規模的變小而變小的,那些變數與問題的規模無關。第二步 確定狀態...