Skip to content

Commit d8dd87f

Browse files
committed
三刷72
1 parent 70dca2f commit d8dd87f

File tree

3 files changed

+55
-3
lines changed

3 files changed

+55
-3
lines changed

docs/0072-edit-distance.adoc

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[#0072-edit-distance]
22
= 72. 编辑距离
33

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

66
给你两个单词 `word1``word2`_请返回将 `word1` 转换成 `word2` 所使用的最少操作数_
77

@@ -37,13 +37,13 @@ exection -> execution (插入 'u')
3737

3838
*提示:*
3939

40-
* `+0 <= word1.length, word2.length <= 500+`
40+
* `0 \<= word1.length, word2.length \<= 500`
4141
* `word1``word2` 由小写英文字母组成
4242
4343
4444
== 思路分析
4545

46-
动态规划
46+
动态规划:计算 `dp[c][r]` 时,从相邻三个元素获取递推的含义还要好好思考一下,“增”、“删”和“改”的含义要理解清楚。
4747

4848
`dp[i][j]` 代表 `word1` 中前 `i` 个字符,变换到 `word2` 中前 `j` 个字符,最短需要操作的次数。
4949

@@ -81,6 +81,15 @@ include::{sourcedir}/_0072_EditDistance.java[tag=answer]
8181
include::{sourcedir}/_0072_EditDistance_2.java[tag=answer]
8282
----
8383
--
84+
85+
三刷::
86+
+
87+
--
88+
[{java_src_attr}]
89+
----
90+
include::{sourcedir}/_0072_EditDistance_3.java[tag=answer]
91+
----
92+
--
8493
====
8594

8695
== 思考题

logbook/202503.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1949,6 +1949,11 @@ endif::[]
19491949
|{doc_base_url}/0073-set-matrix-zeroes.adoc[题解]
19501950
|✅ 矩阵。最简单的办法就是记录出现 `0` 的行号和列号,最后根据行号和列号设置 `0`。取巧的办法是把出现 `0` 的位置在首行和首列标记一下,首行和首列需要首先检查一下是否已经包含 `0`,最后再单独处理首行和首列。
19511951

1952+
|{counter:codes2503}
1953+
|{leetcode_base_url}/edit-distance/[72. 编辑距离^]
1954+
|{doc_base_url}/0072-edit-distance.adoc[题解]
1955+
|❌ 动态规划。计算 `dp[c][r]` 时,从相邻三个元素获取递推的含义还要好好思考一下,“增”、“删”和“改”的含义要理解清楚。
1956+
19521957
|===
19531958

19541959
截止目前,本轮练习一共完成 {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_3 {
4+
// tag::answer[]
5+
/**
6+
* @author D瓜哥 · https://www.diguage.com
7+
* @since 2025-11-20 22:42:36
8+
*/
9+
public int minDistance(String word1, String word2) {
10+
int m = word1.length();
11+
int n = word2.length();
12+
int[][] dp = new int[m + 1][n + 1];
13+
for (int r = 0; r <= n; r++) {
14+
dp[0][r] = r;
15+
}
16+
// 可以把这步和下面的循环合并,减少一次循环
17+
for (int c = 0; c <= m; c++) {
18+
dp[c][0] = c;
19+
}
20+
for (int c = 1; c <= m; c++) {
21+
for (int r = 1; r <= n; r++) {
22+
if (word1.charAt(c - 1) == word2.charAt(r - 1)) {
23+
dp[c][r] = dp[c - 1][r - 1];
24+
} else {
25+
int min = Math.min(dp[c][r - 1], dp[c - 1][r]);
26+
min = Math.min(min, dp[c - 1][r - 1]);
27+
dp[c][r] = min + 1;
28+
}
29+
}
30+
}
31+
return dp[m][n];
32+
}
33+
34+
// end::answer[]
35+
static void main() {
36+
new _0072_EditDistance_3().minDistance("horse", "ros");
37+
}
38+
}

0 commit comments

Comments
 (0)