題目:有兩個字串(可能包含空格),找出其中最長的公共連續子串,並輸出其長度。
輸入描述:
輸入為兩行字串(可能包含空格),長度均小於等於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_len
max_len=dp[i][j];
}
}
}
}
printf
(
"%d\n"
,max_len);
return
0;
}
最長公共子串,字串
目前,在各大 或者是,有著不少的關於這個問題的講解,但是目前覺得都不是很清晰明白!現在普遍的解法都是用動態規劃的方式來做這道筆試題。或者是經典的面試題。這裡我做乙個自認為比較清楚的講解。說到動態規劃很多人都不會感到很陌生。但是有多少知道動態規劃什麼?精髓在 這裡僅僅提供一些個人見解,首先,動態規劃不...
最長公共連續子串
這是兩個字串,所以狀態轉移矩陣肯定是二維矩陣。另外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...