编辑距离问题,直接套公式就可以了,但是这里的话需要说明一下 dp[i-1][j] 是删除,将第i个删除,然后i-1 和j 进行比较 dp[i][j-1] 是插入 插入一个和j 位置一样的值, 再去比较i 和 j-1的大小 dp[i-1][j-1] 如果ij 位置相同,那么什么都不用做,就是等于 i-1 j-1 位置的值的,如果不相等那么就是做了一次转换,编辑距离一定是这三种操作里面的最小值,这是一个理解起来比较复杂,但是解法简单的习题,下面贴代码,我是按照动态规划的方式去解的,这个题的话按照递归的思想也可以。

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char str1[1005],str2[1005];
int dp[1005][1005];
int main(){
    while(scanf("%s %s",str1,str2)!=EOF){
        memset(dp,0,sizeof(dp));
        int len1=strlen(str1);
        int len2=strlen(str2);
        for(int i=0;i<=len1;i++){
            dp[i][0]=i;
        }
        for(int j=0;j<=len2;j++){
            dp[0][j]=j;
        }
        for(int i=1;i<=len1;i++){
            for(int j=1;j<=len2;j++){
                if(str1[i-1]==str2[j-1]){
                    dp[i][j]=dp[i-1][j-1];
                }else{
                    dp[i][j]=min(min(dp[i-1][j]+1,dp[i][j-1]+1),dp[i-1][j-1]+1);
                }
            }
        }
        printf("%d\n",dp[len1][len2]);
    }
    return 0;
}