这里要注意的一个点就是创建dp数组的时候,行和列都需要多一个,因为dp[0][0]的含义是两个单词都只有0个的时候需要编辑的次数,所以比如说某个单词有七个,初始化dp数组的时候我只给七个,0会占去一个所以只有六个字母会被比较

#include<stdio.h>

int f_min(int a, int b, int c){

int min;
if(a>b){
    min=b;
}
else{
    min =a;
}
if(min>c)min=c;
return min;

}

int main(){

char first[1000]={0};
char second[1000]={0};
while(scanf("%s", first) != EOF){
    scanf("%s", second);
    int i, j;
    for(i=0; first[i] != '\0'; i++);
    for(j=0; second[j] != '\0'; j++);
    int**dp=(int**)malloc(sizeof(int*)*(i+1));
    for(int x=0; x<i+1; x++){
        dp[x]=(int*)malloc(sizeof(int)*(j+1));
    }//dp[x][0]=x  dp[0][j]=0
    for(int x=0; x<i+1; x++)dp[x][0]=x;
    for(int x=0; x<j+1; x++)dp[0][x]=x;

    for(int m=1; m<=i; m++)
    {
        for(int n=1; n<=j; n++){
            if(first[m-1]==second[n-1]){
                dp[m][n]=dp[m-1][n-1];
            }
            else{
                dp[m][n]=f_min(dp[m-1][n]+1, dp[m][n-1]+1, dp[m-1][n-1]+1);
            }
        }
    }
    printf("%d\n", dp[i][j]);
}

}