动态规划-----最长公共连续子串


牛牛有两个字符串(可能包含空格),牛牛想找出其中最长的公共连续子串,希望你能帮助他,并输出其长度。

输入描述:

输入为两行字符串(可能包含空格),长度均小于等于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;
} 


    原文作者:动态规划
    原文地址: https://blog.csdn.net/zls986992484/article/details/69863710
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞