動態規劃-----最長公共連續子串
阿新 • • 發佈:2019-01-09
牛牛有兩個字串(可能包含空格),牛牛想找出其中最長的公共連續子串,希望你能幫助他,並輸出其長度。
輸入描述:
輸入為兩行字串(可能包含空格),長度均小於等於50輸出描述:
輸出為一個整數,表示最長公共連續子串的長度
輸入例子:
abcde
abgde
輸出例子:
2解題思路:
這題其實是動態規劃的變形經典題型,應用動態規劃的思想,建立一個二維陣列dp[n][n],其中dp[i][j],表示取到s1[i]和取到s2[j]時的最大連續子串長度。如果s1[i]等於s2[j],則dp[i-1][j-1]等於取到s1[i-1]和取到s2[j-1]時的最大連續子串長度加1,即
dp[i][j]=dp[i-1][j-1]+1。
#include <stdio.h> #include <string.h> #define N 50 int main(){ char s1[N],s2[N]; int dp[N][N],i,j,max_len=0; gets(s1); gets(s2); for(i=0;i<strlen(s1);i++){ for(j=0;j<strlen(s2);j++){ if(s1[i]==s2[j]){ if(i>0&&j>0){ dp[i][j]=dp[i-1][j-1]+1; }else{ dp[i][j]=1; } if(max_len<dp[i][j]){ max_len=dp[i][j]; } } } } printf("%d\n",max_len); return 0; }