#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
// longest common sequence
// three cases
// 1) dp[i][j] = 0; if(i==0 || j==0)
// 2) dp[i][j] = dp[i-1][j-1]+1 if (match(i, j));
// 3) dp[i][j] = max(dp[i-1][j], dp[i][j-1]) if (!match(i, j))
const int size = 1002;
int dp[size][size];
int n1, n2;
string s1, s2;
int testcase;
int main(){
scanf("%d", &testcase);
while (testcase--){
cin>>s1>>s2;
n1 = s1.size(), n2 = s2.size();
memset(dp, 0, sizeof(dp));
for (int i = 1; i <=n1 ; ++i) {
for (int j = 1; j <=n2 ; ++j) {
if (s1[i-1] == s2[j-1]){
dp[i][j] = dp[i-1][j-1]+1;
} else{
dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
}
}
}
cout<<dp[n1][n2]<<endl;
}
}
LCS
最新推荐文章于 2022-10-01 07:05:38 发布