动态规划-----最长公共连续子串
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。
下面直接上代码:
[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; }
相关文章推荐
- 动态规划 最长公共子序列LCS、最长公共连续子串、最长重复子串
- 动态规划求解最长公共子串与公共子序列
- 动态规划-最长公共子序列、最长公共子串
- acm动态规划之LCS最长公共子串uva10405Longest Common Subsequence解题报告
- 动态规划 : 最长公共子串
- 【算法之动态规划(三)】动态规划算法之:最长公共子序列 & 最长公共子串(LCS),字符串相似度算法
- 动态规划--最长公共子串
- 最长公共子串(动态规划的思想)
- 动态规划-最长公共子串
- 动态规划之最长公共子串
- 动态规划之最长公共子序列&最长公共子串
- 动态规划2 - 最长公共子序列与最长公共子串
- 最长公共子串LCS--之动态规划
- 动态规划:最长公共子串长度
- acm动态规划之LCS最长公共子串uva10405Longest Common Subsequence解题报告
- 动态规划 —— 最长公共子串(输出长度和第一个出现的子串)
- 动态规划:最长公共子序列与最长公共子串
- 动态规划:求最长公共子串/最长公共子序列
- 动态规划-最长公共子串问题的实现
- 动态规划求最长公共子串