题解 | #编辑距离为一#
编辑距离为一
https://www.nowcoder.com/practice/0b4b22ae020247ba8ac086674f1bd2bc
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @param t string字符串 * @return bool布尔型 */ int delet(char* a, int n) { //删除字符串a的第n的字符。 int len = strlen(a); //对于"hello",len = 5 if (n == 0) return a + 1; if (n == len - 1) { *(a + len - 1) = '\0'; return a; } for (int i = n; i < len - 1; i++) { *(a + i) = *(a + i + 1); } *(a + len - 1) = '\0'; return a; // int len = strlen(a); // //对于"hello",len = 5 // if (a[n] != '\0') { // for (int i = n - 1; i < len; i++) { // //注意第n个字符在字符串a中的下标为n-1 // //通过字符覆盖的方式,实现字符删除 // *(a + i) = *(a + i + 1); // } // //对于字符串来说,最后一定要以'\0'结束,才可以正常输出 // *(a + len) = '\0'; // return *(a + n - 1); // } else // return 0; } bool editdistance(char* s, char* t ) { // write code here int m = strlen(s); int n = strlen(t); //printf("%d %d",m,n); char snew[m + 1]; char snew1[n + 1]; if (m >= n + 2) return false; int count = 0; if (m == n) { for (int i = 0; i < m; i++) { if (s[i] != t[i]) { count++; } if (count > 1) { return false; } } if (count == 0) return false; return true; } if (m > n) { for (int i = 1; i <= m; i++) { strcpy(snew, s); //printf("%d ",strcmp(snew, s)); delet(snew, i); //printf("%d ",strlen(snew)); if (strcmp(snew, t) == 0) return true; } } if (m < n) { for (int i = 1; i <= n; i++) { strcpy(snew1, t); delet(snew1, i); if (strcmp(snew1, s) == 0) return true; } } return false; }