72.编辑距离

2024/3/30

# Heading

    72.编辑距离 (opens new window)

    Tags: algorithms string dynamic-programming

    Langs: c cpp csharp dart elixir erlang golang java javascript kotlin php python python3 racket ruby rust scala swift typescript

    • algorithms
    • Medium (62.84%)
    • Likes: 3347
    • Dislikes: -
    • Total Accepted: 463K
    • Total Submissions: 737.2K
    • Testcase Example: '"horse"\n"ros"'

    给你两个单词 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
    解释:
    intention -> inention (删除 't')
    inention -> enention (将 'i' 替换为 'e')
    enention -> exention (将 'n' 替换为 'x')
    exention -> exection (将 'n' 替换为 'c')
    exection -> execution (插入 'u')
    

     

    提示:

    • 0 <= word1.length, word2.length <= 500
    • word1word2 由小写英文字母组成
    /*
     * @lc app=leetcode.cn id=72 lang=javascript
     *
     * [72] 编辑距离
     * 动态规划  Hard
     */
    
    // @lc code=start
    /**
     * @param {string} word1
     * @param {string} word2
     * @return {number}
     */
    var minDistance = function (word1, word2) {
      const dp = []
      const m = word1.length
      const n = word2.length
    
      if (m * n === 0) {
        return m + n
      }
    
      for (let i = 0; i < m + 1; i++) {
        dp[i] = [i]
      }
      for (let j = 0; j < n + 1; j++) {
        dp[0][j] = j
      }
    
      for (let i = 0; i < m; i++) {
        for (let j = 0; j < n; j++) {
          if (word1[i] === word2[j]) {
            dp[i + 1][j + 1] = dp[i][j]
          } else {
            dp[i + 1][j + 1] = 1 + Math.min(dp[i][j], dp[i][j + 1], dp[i + 1][j])
          }
        }
      }
    
      return dp[m][n]
    }
    // @lc code=end
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41