您的位置:首页 > 其它

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

2017-04-09 18:33 267 查看
牛牛有两个字符串(可能包含空格),牛牛想找出其中最长的公共连续子串,希望你能帮助他,并输出其长度。

[b]输入描述:[/b]
输入为两行字符串(可能包含空格),长度均小于等于50

[b]输出描述:[/b]
输出为一个整数,表示最长公共连续子串的长度

输入例子:
abcde

abgde

[b]输出例子:[/b]
2

解题思路:

这题其实是动态规划的变形经典题型,应用动态规划的思想,创建一个二维数组dp

,其中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
,s2
;
int dp

,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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息