和UVa111差不多,但在区分前后顺序的时候,用到了UVa111那题从别人的代码那里看来的方法,让个数叠加,最后d[len1][len2]就是最终结果。
1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 int d[2000][2000]; 6 int main() 7 { 8 char s1[2000],s2[2000]; 9 int i,j,len1,len2,maxd; 10 while(gets(s1)) 11 { 12 gets(s2); 13 len1=strlen(s1);len2=strlen(s2); 14 memset(d,0,sizeof(d)); 15 for(i=0;i<len1;i++) 16 { 17 for(j=0;j<len2;j++) 18 if(s2[j]==s1[i]) 19 d[i+1][j+1]=d[i][j]+1; 20 else 21 d[i+1][j+1]=max(d[i+1][j],d[i][j+1]); 22 } 23 printf("%d ",d[len1][len2]); 24 25 } 26 return 0; 27 }