動態規劃之最長連續公共子串行

2021-06-25 15:03:46 字數 1514 閱讀 3175

#include #include #include using namespace std;

//最長連續公共子串行

int maxlength(const char*str1, const char* str2, int str1_len, int str2_len)

;//c[i]j]表示以str1[i-1]和str2[j-1]字元為結尾的子串之間的最長連續公共子串,

//i,j不再表示str1[i]和str2[j],而是表示str1和str2長度的概念,與str1[i-1]和str2[j-1]對應

int maxlen = 0;

int i=0, j=0;

assert(str1 != null && str2 != null);

for (i=0; i<=str1_len; ++i)

c[i][0] = 0; //c[i][0]表示str2的長度為0的情況;

for (j=0; j<=str2_len; ++j)

c[0][j] = 0; //c[0][j]表示str1的長度為0的情況

for (i=1; i<=str1_len; ++i)

for (j=1; j<=str2_len; ++j)

if (str1[i-1] == str2[j-1])

else

return maxlen;

}

//最長連續公共子串行

int maxlength2(const char*str1, const char* str2, int str1_len, int str2_len)

;//c[i]j]表示以str1[i]和str2[j]字元為結尾的子串之間的最長連續公共子串,

int i =0;

int j = 0;

int maxlen = 0;

assert(str1 != null && str2 != null);

//處理字串長度為0的情況

if (str1_len == 0 || str2_len ==0)

return 0;

//必須從0開始,因為c[0][0]==0,會用到

for (i=0; i<=str1_len; ++i)

if (str1[i] == str2[0])

c[i][0] = 1;

else

c[i][0] = 0;

for (j=0; j<=str2_len; ++j)

if (str1[0] == str2[j])

c[0][j] = 1;

else

c[0][j] = 0;

for (i=1; imaxlen)

maxlen = c[i][j];

}else

return maxlen;

}

//注意以上兩種思想的異同點

int main()

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

最長公共子串行簡介 舉例說明並分析 塊測試結果 乙個給定序列的子串行是在該序列中刪去若干元素後得到的序列,確切的說,若給定序列x 則另一串行z x的子串行是指存在乙個嚴格的下標序列,使得對於所有的j 0,1,k 1有zj xij。例如序列z 是序列x 的子串行,相應的遞增下標序列維。最長公共子串行問...

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

給出兩個字串,求出這樣的一 個最長的公共子串行的長度 子串行 中的每個字元都能在兩個原串中找到,而且每個字元的先後順序和原串中的 先後順序一致。sample input abcfbc abfcab programming contest abcd mnp sample output 4 2 0對於動...

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

最長公共子串行問題 time limit 1000 ms memory limit 65536 kib submit statistic discuss problem description 給定兩個序列x input 輸入資料有多組,每組有兩行 每行為乙個長度不超過500的字串 輸入全是大寫英文...