0
点赞
收藏
分享

微信扫一扫

【LeetCode】72. 编辑距离(错题2刷)

西曲风 2022-03-11 阅读 60

0
1
2

  • 思路
    请返回将 word1 转换成 word2 所使用的最少操作数 。
func min(a, b int) int {
    if a < b {
        return a
    }
    return b
}

func minDistance(word1 string, word2 string) int {
    w1Len, w2Len := len(word1), len(word2)
    dp := make([][]int, w1Len + 1)
    for i, _ := range dp {
        dp[i] = make([]int, w2Len + 1)
    }
    // 初始化
    for i := 0; i <= w1Len; i++ {
        dp[i][0] = i
    }
    for j := 0; j <= w2Len; j++ {
        dp[0][j] = j
    }
    // 三种操作:插入、删除、替换
    // 在word1中插入相当于在word2中删除
    for i := 1; i <= w1Len; i++ {
        for j := 1; j <= w2Len; j++ {
            if word1[i - 1] == word2[j - 1] {
                dp[i][j] = dp[i - 1][j - 1]
            } else {
                // 删除:dp[i - 1][j] + 1删除word1中的word1[i - 1]
                // 插入:dp[i][j - 1] + 1将word2[j - 1]插入word1,相当于删除word2[j - 1]
                // 替换:dp[i - 1][j - 1] + 1,word1替换word1[i - 1],使其与word2[j - 1]相同,
                // 此时不用增加元素,那么以下标i-2为结尾的word1与j-2为结尾的word2的最近编辑距离加上一个替换元素的操作
                dp[i][j] = min(dp[i - 1][j - 1] + 1, min(dp[i - 1][j], dp[i][j - 1]) + 1)
            }
        }
    }
    return dp[w1Len][w2Len]
}

3

举报

相关推荐

0 条评论