题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1159
题目类型:
最大公共子串
题意概括:
给出两个字符串,求这两个字符串的最大公共子串
解题思路:
通过一个二维字符串,将两个字符串进行比较,遇到相同则将左上角的值+1赋予当前位置的值,如果不相同,则将左边和上面的值的最大值赋予当前值,右下角的值即最大公共子串的长度。
题目:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 38605 Accepted Submission(s): 17735
# include <stdio.h> # include <string.h> int dp[1010][1010]; int maxx(int a,int b) { if(a>b) return a; else return b; } int main () { int i,j,l1,l2; char a[1010],b[1010]; while(scanf("%s%s",a+1,b+1)!=EOF) { int l1=strlen(a); int l2=strlen(b); memset(dp,0,sizeof(dp)); for(i=0;i<l1;i++) { for(j=0;j<l2;j++) { if(i==0 || j==0) dp[i][j]=0; else if(a[i]==b[j]) dp[i][j]=dp[i-1][j-1]+1; else if(a[i]!=b[j]) dp[i][j]=maxx(dp[i-1][j],dp[i][j-1]); } } printf("%d\n",dp[l1-1][l2-1]); } }
原文:http://www.cnblogs.com/love-sherry/p/6942177.html