求兩字串最長公共連續子串 C 程式設計

2021-08-01 16:57:40 字數 1342 閱讀 4033

題目:有兩個字串(可能包含空格),找出其中最長的公共連續子串,並輸出其長度。

輸入描述:

輸入為兩行字串(可能包含空格),長度均小於等於50。

輸出描述:  

輸出為乙個整數,表示最長公共連續子串的長度。

輸入例子:

abcde

abgde

輸出例子:2

/*例如:str1: abcde    str2: abgde

matrix = [ 1  0  0  0  0

0  1  0  0  0

0  0  0  0  0

0  0  0  1  0

0  0  0  0  1 ]

斜線上連續的1的最大個數為2,所以最長公共連續子串長度為2*/ 是每條對角線,而不只是主對角線。

參考**如下:

#include

#include

using namespace std;

int main()

;       

int  maxlen=0;

gets(str1);  

gets(str2);

for(int i=0;str1[i]!='\0';i++)      //如果兩個位置的元素相等,矩陣值為1

}      

for(int i=0;str1[i]!='\0';i++)      //依次找對角線最大連續1的個數

else

if(max_lenmax_len=dp[i][j];

}

}

}

}

printf("%d\n",max_len);

return0;

}

最長公共子串,字串

目前,在各大 或者是,有著不少的關於這個問題的講解,但是目前覺得都不是很清晰明白!現在普遍的解法都是用動態規劃的方式來做這道筆試題。或者是經典的面試題。這裡我做乙個自認為比較清楚的講解。說到動態規劃很多人都不會感到很陌生。但是有多少知道動態規劃什麼?精髓在 這裡僅僅提供一些個人見解,首先,動態規劃不...

最長公共連續子串

這是兩個字串,所以狀態轉移矩陣肯定是二維矩陣。另外dp i j 代表的意思不是分別乙個字串的前 i 個和另乙個字串的前 j 個字元裡面的最長連續子串。而是以a i 和b j 為末端的公共連續子串長度。如果dp i j 代表是目前最長連續子串,那麼遞推公式就寫不出來,因為不知道dp i j 中公共子串...

最長公共子字串

關於題目理解,請注意和最長公共子串行的區別,最長公共子字串的解法是動態規劃,但是比較難想到表的構造方法。注意到,設給定字串為str1 和 str2 二者的長度分別是 len1 和 len2 那麼解空間大小之多是len1 len2?假設最長公共子字串為substr common,那麼substr co...