dp——求最长公共子串
2017-03-03 16:24
357 查看
#include <cstdio> #include <cstring> using namespace std; #define MAX_DATA 1050 char src[MAX_DATA]; char dst[MAX_DATA]; int dp[MAX_DATA][MAX_DATA]; int main(void) { int i , j ; int max = -1 , s_i = 0 , s_j = 0; #ifdef DEBUG freopen("input.txt" , "r" , stdin); freopen("output.txt" , "w" ,stdout); #endif scanf("%s" , src+1); scanf("%s" , dst+1); memset(dp , 0 ,sizeof(dp)); for( i = 1 ; i <strlen(src+1)+1 ; i++) { for( j = 1 ; j <strlen(dst+1)+1 ; j++) { if(src[i]==dst[j]) { dp[i][j] = dp[i-1][j-1]+1; } else { dp[i][j] = 0; } if(dp[i][j]>max) { max= dp[i][j]; s_i = i ; s_j = j ; } } } printf("%d\n" , max); while(s_i>=0 && s_j>=0) { if(dp[s_i][s_j]!=0) { printf("%c" , src[s_i]); s_i--; s_j--; } else { printf("\n"); break; } } return 0 ; }
相关文章推荐
- 求两个字符串的最长公共子串(DP实现)
- 最长公共子串问题(方法一:暴力+RK匹配,方法二:DP+空间优化)
- [SID-EXAM]利用后缀数组求两个字符串的最长公共子串,较dp效率要高
- dp最长公共子串LCS
- codeforces 163A Substring and Subsequence (dp,最长公共子串变形)
- 最长公共子序列与最长公共子串(DP)
- dp common setensences 最长公共子串
- 最长公共子串-简单的DP
- UVA - 10405 - Longest Common Subsequence (DP - 最长公共子串)
- 最长公共子序列与最长公共子串以及他们的打印(dp)
- DP之钢管切割,最长回文字符串,最长公共子串
- 常考的经典算法--最长公共子序列(LCS)与最长公共子串(DP)
- hdu4681(最长公共子串+DP)
- 最长上升子序列 最长公共子序列 最长公共子串 数字三角形 等简单DP以及变形
- DP(最长公共子串问题)
- ju 2432Greatest Common Increasing Subsequence 最长公共上升子串-dp
- 最长公共子串-不建立dp数组(空间复杂度为O(1))
- 【HDU1080 DP】类似最长公共子串
- 最长公共子序列与最长公共子串(DP)
- History Grading dp+求最长公共子串