Skip to content
c
#include <stdio.h>
#include <string.h>

// 计算编辑距离的函数
int editDistance(const char *s1, const char *s2) {
    int m = strlen(s1); // s1 的长度
    int n = strlen(s2); // s2 的长度

    // 创建二维数组 dp[m+1][n+1]
    int dp[m + 1][n + 1];

    // 初始化边界条件
    for (int i = 0; i <= m; i++) {
        dp[i][0] = i; // 将 s1 的前 i 个字符转换为空字符串需要删除 i 次
    }
    for (int j = 0; j <= n; j++) {
        dp[0][j] = j; // 将空字符串转换为 s2 的前 j 个字符需要插入 j 次
    }

    // 填充动态规划表
    for (int i = 1; i <= m; i++) {
        for (int j = 1; j <= n; j++) {
            if (s1[i - 1] == s2[j - 1]) {
                dp[i][j] = dp[i - 1][j - 1]; // 如果字符相同,不需要额外操作
            } else {
                int insert = dp[i][j - 1] + 1;  // 插入操作
                int delete = dp[i - 1][j] + 1;  // 删除操作
                int replace = dp[i - 1][j - 1] + 1; // 替换操作
                dp[i][j] = (insert < delete ? (insert < replace ? insert : replace) : (delete < replace ? delete : replace));
            }
        }
    }

    // 返回最终的编辑距离
    return dp[m][n];
}

int main() {
    const char *s1 = "kitten";
    const char *s2 = "sitting";

    int distance = editDistance(s1, s2);
    printf("The edit distance between '%s' and '%s' is: %d\n", s1, s2, distance);
    return 0;
}