#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #include<algorithm> using namespace std; char str1[1000]; int l1; char str2[1000]; int l2; int result[1000][1000]; void dp(int n1,int n2) { if(str1[n1-1]==str2[n2-1]) { if(result[n1-1][n2-1]==-1) { dp(n1-1,n2-1); } result[n1][n2]=result[n1-1][n2-1]+1; return; } if(result[n1-1][n2]==-1) { dp(n1-1,n2); } if(result[n1][n2]<result[n1-1][n2]) { result[n1][n2]=result[n1-1][n2]; } if(result[n1][n2-1]==-1) { dp(n1,n2-1); } if(result[n1][n2]<result[n1][n2-1]) { result[n1][n2]=result[n1][n2-1]; } } int main() { while(scanf("%s %s",str1,str2)!=EOF) { l1=strlen(str1); l2=strlen(str2); int i; memset(result,-1,sizeof(result)); for(i=0;i<=l1;i++) { result[i][0]=0; } for(i=0;i<=l2;i++) { result[0][i]=0; } dp(l1,l2); printf("%d\n",result[l1][l2]); } return 0; }
转载于:https://www.cnblogs.com/willzhang/archive/2012/08/05/2624167.html