Skip to content

编辑距离

js
// 给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。

// 你可以对一个单词进行如下三种操作:

// 插入一个字符

// 删除一个字符

// 替换一个字符

// 示例 1:

// 输入:word1 = "horse", word2 = "ros"

// 输出:3

// 解释: horse -> rorse (将 'h' 替换为 'r') rorse -> rose (删除 'r') rose -> ros (删除 'e')

// 示例 2:

// 输入:word1 = "intention", word2 = "execution"

// 输出:5

function fn(word1, word2){
    const w1Len = word1.length, w2Len = word2.length, dp = new Array(w1Len + 1).fill(0).map(() => new Array(w2Len + 1).fill(0))

    for(let i = 0; i <= w1Len; i ++){
        dp[i][0] = i
    }

    for(let i = 0; i <= w1Len; i ++){
        dp[0][i] = i
    }

    for(let i = 1; i <= w1Len; i ++){
        for(let j = 1; j <= w2Len; j ++){
            if(word1[i - 1] === word2[j - 1]){
                dp[i][j] = dp[i - 1][j - 1]
            } else {
                //不相等,考虑删除(word1,word2),替换
                dp[i][j] = Math.min(dp[i - 1][j] + 1, dp[i][j - 1] + 1, dp[i - 1][j - 1] + 1)
            }
        }
    }

    return dp[w1Len][w2Len]
}

console.log(fn("horse","ros"))
console.log(fn("intention","execution"))
// 给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。

// 你可以对一个单词进行如下三种操作:

// 插入一个字符

// 删除一个字符

// 替换一个字符

// 示例 1:

// 输入:word1 = "horse", word2 = "ros"

// 输出:3

// 解释: horse -> rorse (将 'h' 替换为 'r') rorse -> rose (删除 'r') rose -> ros (删除 'e')

// 示例 2:

// 输入:word1 = "intention", word2 = "execution"

// 输出:5

function fn(word1, word2){
    const w1Len = word1.length, w2Len = word2.length, dp = new Array(w1Len + 1).fill(0).map(() => new Array(w2Len + 1).fill(0))

    for(let i = 0; i <= w1Len; i ++){
        dp[i][0] = i
    }

    for(let i = 0; i <= w1Len; i ++){
        dp[0][i] = i
    }

    for(let i = 1; i <= w1Len; i ++){
        for(let j = 1; j <= w2Len; j ++){
            if(word1[i - 1] === word2[j - 1]){
                dp[i][j] = dp[i - 1][j - 1]
            } else {
                //不相等,考虑删除(word1,word2),替换
                dp[i][j] = Math.min(dp[i - 1][j] + 1, dp[i][j - 1] + 1, dp[i - 1][j - 1] + 1)
            }
        }
    }

    return dp[w1Len][w2Len]
}

console.log(fn("horse","ros"))
console.log(fn("intention","execution"))