#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char a[2001],b[2001];
int dp[2001][2001];
int main()
{
//freopen("edit.in","r",stdin);
//freopen("edit.out","w",stdout);
scanf("%s",a+1);
scanf("%s",b+1);//scanf读入字符串,+1错位,还要用%s
int n=strlen(a+1),m=strlen(b+1);
for(int i=1;i<=n;i++) dp[i][0]=i;
for(int i=1;i<=m;i++) dp[0][i]=i;//dp初始化
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i]==b[j]) dp[i][j]=dp[i-1][j-1];
else dp[i][j]=min(dp[i-1][j-1],min(dp[i][j-1],dp[i-1][j]))+1;
}
}
cout<<dp[n][m];
return 0;
}
本题逐个字符进行比较即可,DP数组记录的是由ai转到bj需要转换的次数。