diff --git "a/docs/10.LeeCode/72.\347\274\226\350\276\221\350\267\235\347\246\273.md" "b/docs/10.LeeCode/72.\347\274\226\350\276\221\350\267\235\347\246\273.md" new file mode 100644 index 0000000..008aac2 --- /dev/null +++ "b/docs/10.LeeCode/72.\347\274\226\350\276\221\350\267\235\347\246\273.md" @@ -0,0 +1,75 @@ +--- +title: 72.编辑距离 +date: 2024-03-30 +lang: 'zh-CN' +sidebar: 'auto' +categories: + - LeeCode +tags: +location: HangZhou +--- + +# Heading + +[[toc]] + +[72.编辑距离](https://leetcode.cn/problems/edit-distance/description/) + +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')
+
+ +

 

+ +

提示:

+ + + +<<< @/src/LeeCode/72.编辑距离.js diff --git "a/src/LeeCode/72.\347\274\226\350\276\221\350\267\235\347\246\273.js" "b/src/LeeCode/72.\347\274\226\350\276\221\350\267\235\347\246\273.js" new file mode 100644 index 0000000..c690d42 --- /dev/null +++ "b/src/LeeCode/72.\347\274\226\350\276\221\350\267\235\347\246\273.js" @@ -0,0 +1,42 @@ +/* + * @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 \ No newline at end of file