#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需要转换的次数。