#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
//freopen("LCS.txt","r",stdin);
int t,i,j;
char s1[1002],s2[1002];
cin>>t;
while(t--){
cin>>s1>>s2;
int x=strlen(s1);
int y=strlen(s2);
int len[x+1][y+1];
memset(len,0,sizeof(len));
for(i=1;i<=x;i++){
for(j=1;j<=y;j++){
if(s1[i-1]==s2[j-1])
len[i][j]=len[i-1][j-1]+1;
else{
if(len[i-1][j]>len[i][j-1])
len[i][j]=len[i-1][j];
else
len[i][j]=len[i][j-1];
}
}
}
cout<<len[x][y]<<endl;
}
return 0;
}
总结:递推公式如下
相关链接:最长公共子序列