//状态 dp[i][j]表示a的前i位变成b的前j位所要的最少时间
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int dp[502][502];
string a, b;
int main() {
int n;
cin >> n;
while (n--) {
fill(dp[0], dp[0] + 502 * 502, 0);
for (int i = 0; i < 502; ++i) {
dp[i][0] = i;
dp[0][i] = i;
}
cin >> a >> b;
for (int i = 1; i <= a.size(); ++i) {
for (int j = 1; j <= b.size(); ++j) {
if (a[i - 1] == b[j - 1]) {
dp[i][j] = dp[i - 1][j - 1];
}
else {
dp[i][j] = min(min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]) + 1;
}
}
}
cout << dp[a.size()][b.size()] << endl;
}
return 0;
}
不是最长公共序列好吧 有些位置还要先删掉再在其他位置上加 不是相等的关系
比如abc修改成acb
不对