1. 程式人生 > >動態規劃-----最長公共連續子串

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


牛牛有兩個字串(可能包含空格),牛牛想找出其中最長的公共連續子串,希望你能幫助他,並輸出其長度。
輸入描述:
輸入為兩行字串(可能包含空格),長度均小於等於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;
}