其实就是最长公共子序列的简化版。
#include<stdio.h>
int c[1000][1000];
int max(int x,int y){
if(x<y)
x=y;
return x;
}
int main(){
char a[1000],b[1000];
int i,j;
while(scanf("%s%s",a,b)!=-1){
for(i=0;i<=1000;i++){
c[0][i]=0;
c[i][0]=0;
}
for(i=0;b[i];i++)
for(j=0;a[j];j++){
if(b[i]==a[j])
c[i+1][j+1]=c[i][j]+1;
else
c[i+1][j+1]=max(c[i][j+1],c[i+1][j]);
}
printf("%d\n",c[i][j]);
}
return 0;
}