Skip to content

Commit 16ce954

Browse files
committed
二刷72
1 parent 95def6f commit 16ce954

File tree

3 files changed

+58
-13
lines changed

3 files changed

+58
-13
lines changed

docs/0072-edit-distance.adoc

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,14 @@
33

44
https://leetcode.cn/problems/edit-distance/[LeetCode - 72. 编辑距离 ^]
55

6-
给你两个单词 `+word1+``+word2+`
7-
_请返回将 `+word1+` 转换成 `+word2+` 所使用的最少操作数_
6+
给你两个单词 `word1``word2`_请返回将 `word1` 转换成 `word2` 所使用的最少操作数_
87

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

1110
* 插入一个字符
1211
* 删除一个字符
1312
* 替换一个字符
1413
15-
16-
1714
*示例1:*
1815

1916
....
@@ -41,7 +38,7 @@ exection -> execution (插入 'u')
4138
*提示:*
4239

4340
* `+0 <= word1.length, word2.length <= 500+`
44-
* `+word1+``+word2+` 由小写英文字母组成
41+
* `word1``word2` 由小写英文字母组成
4542
4643
4744
== 思路分析
@@ -76,20 +73,25 @@ include::{sourcedir}/_0072_EditDistance.java[tag=answer]
7673
----
7774
--
7875
79-
// 二刷::
80-
// +
81-
// --
82-
// [{java_src_attr}]
83-
// ----
84-
// include::{sourcedir}/_0072_EditDistance_2.java[tag=answer]
85-
// ----
86-
// --
76+
二刷::
77+
+
78+
--
79+
[{java_src_attr}]
80+
----
81+
include::{sourcedir}/_0072_EditDistance_2.java[tag=answer]
82+
----
83+
--
8784
====
8885

86+
== 思考题
87+
88+
思考如何进一步优化成一维数组?
89+
8990

9091
== 参考资料
9192

9293
. https://leetcode.cn/problems/edit-distance/solutions/189676/edit-distance-by-ikaruga/[72. 编辑距离 - 【编辑距离】入门动态规划,你定义的 dp 里到底存了啥^]
9394
. https://leetcode.cn/problems/edit-distance/solutions/188223/bian-ji-ju-chi-by-leetcode-solution/[72. 编辑距离 - 官方题解^]
95+
. https://leetcode.cn/problems/edit-distance/solutions/2133222/jiao-ni-yi-bu-bu-si-kao-dong-tai-gui-hua-uo5q/[72. 编辑距离 - 【视频】教你一步步思考动态规划,从记忆化搜索到递推到空间优化!^] -- 从递归到动态规划,从矩阵到一维数组,逐步优化。
9496

9597

logbook/202503.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,11 @@ endif::[]
373373
|{doc_base_url}/0042-trapping-rain-water.adoc[题解]
374374
|❌ 使用单调栈没写出来。使用单调栈,需 `h × w`,不能只看头顶的容量。使用左右双指针夹逼代码更简单,只需要计算头顶的容量即可。
375375

376+
|{counter:codes}
377+
|{leetcode_base_url}/edit-distance/[72. 编辑距离^]
378+
|{doc_base_url}/0072-edit-distance.adoc[题解]
379+
|✅ 动态规划。思考如何进一步优化成一维数组?
380+
376381
|===
377382

378383
截止目前,本轮练习一共完成 {codes2503} 道题。
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.diguage.algo.leetcode;
2+
3+
public class _0072_EditDistance_2 {
4+
// tag::answer[]
5+
/**
6+
* @author D瓜哥 · https://www.diguage.com
7+
* @since 2025-04-20 19:29:44
8+
*/
9+
public int minDistance(String word1, String word2) {
10+
int m = word1.length(), n = word2.length();
11+
int[][] dp = new int[m + 1][n + 1];
12+
for (int i = 1; i <= m; i++) {
13+
dp[i][0] = i;
14+
}
15+
for (int i = 1; i <= n; i++) {
16+
dp[0][i] = i;
17+
}
18+
for (int i = 1; i <= m; i++) {
19+
for (int j = 1; j <= n; j++) {
20+
if (word1.charAt(i - 1) == word2.charAt(j - 1)) {
21+
dp[i][j] = dp[i - 1][j - 1];
22+
} else {
23+
// 替换:dp[i][j] = dp[i-1][j-1] + 1
24+
// 删除:dp[i][j] = dp[i-1][j] + 1
25+
// 插入:dp[i][j] = dp[i][j-1] + 1
26+
// dp[i][j] = min{dp[i-1][j-1], dp[i][j-1], dp[i-1][j]} + 1
27+
int min = Math.min(Math.min(dp[i - 1][j - 1], dp[i - 1][j]), dp[i][j - 1]);
28+
dp[i][j] = min + 1;
29+
}
30+
}
31+
}
32+
return dp[m][n];
33+
}
34+
// end::answer[]
35+
public static void main(String[] args) {
36+
new _0072_EditDistance_2().minDistance("horse", "ros");
37+
}
38+
}

0 commit comments

Comments
 (0)