【題目】
給定兩個字串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...