动态规划-----最长公共连续子串
Posted 倾城一笑stu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态规划-----最长公共连续子串相关的知识,希望对你有一定的参考价值。
牛牛有两个字符串(可能包含空格),牛牛想找出其中最长的公共连续子串,希望你能帮助他,并输出其长度。
输入描述:
输入为两行字符串(可能包含空格),长度均小于等于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;
以上是关于动态规划-----最长公共连续子串的主要内容,如果未能解决你的问题,请参考以下文章
动态规划——最长公共子序列与最长公共子串 (含Python实现代码)