最長公共子串行問題

2021-07-25 11:29:50 字數 770 閱讀 1038

給定兩個字串 s1s2….sn和t1t2….tn 。求出這兩個字串最長的公共子串行的長度。字串s1s2….sn的子串行指可以表示為si1si2…sim的序列 i1< i2<…. < im。

如s=」abcd」, t = 「abcd」, 則輸出3(「bcd」)。

這個問題稱為最長公共子串行(lcs)問題,問題求解可用如下方式定義:

dp[ i][j] :=s1…..si 和t1 … tj對應的lcs長度

由此,s1s2…si+1 和t1…..tj對應的公共子串行可能是

當si+1=tj+1時,在s1…si和t1…tj的公共子列末尾追加上si+1;

s1…si和t1…tj+1的lcs;

s1…si+1和t1…tj的lcs;

所以

public

static

void

dplcs(string s, string t)

if(t==null)

int n = s.length(),m=t.length();

int max = s.length() > t.length() ? s.length():t.length();

int dp= new

int[max+1][max+1];

for(int i=0; ifor(int j=0; jif(s.charat(i)==t.charat(j))else}}

system.out.println("max "+dp[n][m]);

}

最長公共子串行問題

給定整數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...