题解 | #计算字符串的编辑距离#
计算字符串的编辑距离
https://www.nowcoder.com/practice/3959837097c7413a961a135d7104c314
递归,超时了
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> int max(a,b) { return a>b?a:b; } int min(a,b,c) { a = a<b?a:b; return a<c?a:c; } int mindistance(char *a, char *b) { if(strlen(a) == 0 || strlen(b) == 0){//删除剩余字符 return max(strlen(a), strlen(b)); } if(a[strlen(a)-1] == b[strlen(b)-1]){//最后一个字符相等,比较下一个字符 a[strlen(a)-1] = '\0'; b[strlen(b)-1] = '\0'; return mindistance(a, b); } //执行删除 插入 替换 char *a1 = (char *)malloc(strlen(a)+1); char *b1 = (char *)malloc(strlen(b)+1); memcpy(a1, a, strlen(a)+1); memcpy(b1, b, strlen(b)+1); int m,n,k; //删除 a1[strlen(a1)-1] = '\0'; m = mindistance(a1, b1); //插入 memcpy(a1, a, strlen(a)+1); b1[strlen(b1)-1] = '\0'; n = mindistance(a1, b1); //替换 memcpy(a1, a, strlen(a)+1); memcpy(b1, b, strlen(b)+1); a1[strlen(a1)-1] = '\0'; b1[strlen(b1)-1] = '\0'; k = mindistance(a1, b1); free(a1); free(b1); return 1 + min(m,n,k); } int main(void) { char a[1024]; char b[1024]; scanf("%s", a); scanf("%s", b); printf("%d", mindistance(a, b)); return 0; }