题目:计算字符串距离
思路:同编辑距离
代码:
#include<bits/stdc++.h>
using namespace std;
#define maxn 2000
#define inf (1<<30)
char a[maxn+5],b[maxn+5];
int f[maxn+5][maxn+5]= {0};
int n,m;
int dp() {
for(int i=0;i<=n;i++) f[i][0]=i;
for(int j=0;j<=m;j++) f[0][j]=j;
for(int i=1; i<=n; i++) {
for(int j=1; j<=m; j++) {
if(a[i]==b[j]) f[i][j]=f[i-1][j-1];
else f[i][j]=1+f[i-1][j-1];
f[i][j]=min(f[i][j],min(f[i-1][j],f[i][j-1])+1);
}
}
return f[n][m];
}
int main() {
int T;
scanf("%d",&T);
while(T--) {
scanf("%s%s",a,b);
n=strlen(a),m=strlen(b);
for(int i=n; i>=1; i--) a[i]=a[i-1];
for(int i=m; i>=1; i--) b[i]=b[i-1];
int ans=dp();
printf("%d\n",ans);
}
}