動態規劃方法求最大公共子串行

2021-06-26 14:32:59 字數 1164 閱讀 8310

想找個方式記錄一下自己的學習的歷程,思來想去沒有什麼好方法。所以,乾脆裝個b寫個部落格吧!

當然**都是各處搬運的!我們只是**的搬運工!

問題描述:

字串行的子串行

是指從給定字串行中隨意地(不一定連續)去掉若干個字元(可能乙個也不去掉)後所形成的字串行

。......(打符號太麻煩,此處省略,反正我不是寫來給別人看得!!?)

求解:利用遞迴的思想:如果c(i-1,j-1)是a前i位和b前j位字串的最大公共子串長度,那麼

int c[100][100];//初始化為零

int b[100][100];//用來記錄移動的方向

inline int issame(char a,char b)

int lcs(string str1,string str2)

else

//如果不相等,那麼取c[i-1][j-1],c[i][j-1],c[i-1][j]中的最大者

//由於後兩個必定不小於第乙個,因此只要考慮c[i][j-1]和c[i-1][j]

if(c[i-1][j]>=c[i][j-1])

else

//如果不用寫出字串的話只要一行**

//c[i][j]=max(max(issame(str1[i-1],str2[j-1])+c[i-1][j-1],c[i-1][j]),c[i][j-1]);

} return c[len1][len2];

}void printlcs(string str1,string str2,int n,int m)

{ //回溯法列印

if(n==0||m==0)

return;

if(b[n][m]==1)//1表示新增了乙個相同的字元

{ printlcs(str1,str2,n-1,m-1);

cout<

動態規劃查詢最大公共子串行

使用二維陣列c m,n c i,j 記錄序列xi和yj的最長公共子串行的長度 當i 0或j 0時,空序列是xi和yj的最長公共子串行,故c i,j 0 以上x和y進行一 一對比,a和b不相等,則比較它的左邊那個數和上邊那個數他們兩誰大 a和d比較,不相等,同理 直達a和a相比,相等,則它的左上角那個...

java 動態規劃最大公共子串行問題

剛開始按照自己的思路寫出來結果是不多了,而且還出現了陣列越界異常,在一點點的修改下,終於對了,但是還有很多可以改進的地方 package first 最長公共子串行 public class lcs string b new string int m a.length int n b.length ...

動態規劃 最大公共子串行長度問題

昨晚部門出去吃火鍋,十來個人有說有笑的,感覺很不錯,不過因此昨天的 每日一題 也就沒時間了,現在補上。問題 有兩個字串a a1 a2 a3 an和b b1 b2 b3 bm,求兩者的最大公共子串行的長度,這裡的公共子串行就是相同的兩個字串中字元相同的子串行。如 abcdefg 和 acghlm的最大...