最長公共子串行問題

2021-08-15 12:49:11 字數 1125 閱讀 6346

【題目】

給定兩個字串str1和str2,返回兩個字串的最長公共子串行。

【舉例】

str1=」1a2c3d4b56」

str2=」b1d23ca45b6a」

「123456」或者」12c4b6」都是最長公共子串行,返回哪個都行。

【**】

public

static

void

main(string args)

//最長公共子串行問題

//獲得公共序列長度

public

static

int getdp(char str1,char str2)

for(int j=1;j//第1行,str1[0]與str2[0..j]公共長度

dp[0][j]=math.max(dp[0][j-1], str1[0]==str2[j]?1:0);

}for(int i=1;ifor(int j=1;j1][j], dp[i][j-1]);

if(str1[i]==str2[j])}}

return dp;

//矩陣右下角的值:兩個str整體的最長公共子串行的長度

}public

static string lcse(string str1,string str2)

char chs1=str1.tochararray();

char chs2=str2.tochararray();

int dp=getdp(chs1,chs2);

int m=chs1.length-1;

int n=chs2.length-1;

char res=new

char[dp[m][n]];

int index=res.length-1;

//從矩陣的右下角開始移動,移動方式:向上、向左、左上

while(index>=0)

else

if(m>0 && dp[m][n]==dp[m-1][n])else

}return string.valueof(res);

}

最長公共子串行問題

給定整數a1,a2,an 可能有負值 求連續子串行和的最大值。為方便起見,如果所有整數都為負值,則最大子串行和為0 這是個顯而易見的方法,幾乎每個人在第一眼看到該問題都能夠想出來的方法。就是將所有的子串行找出來,然後求和最大的乙個。如果序列足夠大,該方法的效率可想而知。如下 include incl...

最長公共子串行問題

最長公共子串行問題很早就在很多論壇上見過,前幾天看到乙個人發了一篇帖子,心血來潮就去看演算法導論上的動態規劃部分,關於這個問題不再細述,直接貼c 實現的具體 了。做大公共子串行問題 pragma once include using std string define over 1 書中使用箭頭符號...

最長公共子串行問題

問題描述 字串行的子串行是指從給定字串行中隨意地 不一定連續 去掉若干個字元 可能乙個也不去掉 後所形成的字串行。令給定的字串行x x0,x1,xm 1 序列y y0,y1,yk 1 是x的子串行,存在x的乙個嚴格遞增下標序列,使得對所有的j 0,1,k 1,有xij yj。例如,x abcbdab...