File tree Expand file tree Collapse file tree 3 files changed +55
-3
lines changed
src/main/java/com/diguage/algo/leetcode Expand file tree Collapse file tree 3 files changed +55
-3
lines changed Original file line number Diff line number Diff line change 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]
8181include::{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== 思考题
Original file line number Diff line number Diff 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} 道题。
Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments