File tree Expand file tree Collapse file tree 3 files changed +58
-13
lines changed
src/main/java/com/diguage/algo/leetcode Expand file tree Collapse file tree 3 files changed +58
-13
lines changed Original file line number Diff line number Diff line change 3
3
4
4
https://leetcode.cn/problems/edit-distance/[LeetCode - 72. 编辑距离 ^]
5
5
6
- 给你两个单词 `+word1+` 和 `+word2+` ,
7
- _请返回将 `+word1+` 转换成 `+word2+` 所使用的最少操作数_ 。
6
+ 给你两个单词 `word1` 和 `word2` ,_请返回将 `word1` 转换成 `word2` 所使用的最少操作数_ 。
8
7
9
8
你可以对一个单词进行如下三种操作:
10
9
11
10
* 插入一个字符
12
11
* 删除一个字符
13
12
* 替换一个字符
14
13
15
-
16
-
17
14
*示例1:*
18
15
19
16
....
@@ -41,7 +38,7 @@ exection -> execution (插入 'u')
41
38
*提示:*
42
39
43
40
* `+0 <= word1.length, word2.length <= 500+`
44
- * `+ word1+ ` 和 `+ word2+ ` 由小写英文字母组成
41
+ * `word1` 和 `word2` 由小写英文字母组成
45
42
46
43
47
44
== 思路分析
@@ -76,20 +73,25 @@ include::{sourcedir}/_0072_EditDistance.java[tag=answer]
76
73
----
77
74
--
78
75
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
+ --
87
84
====
88
85
86
+ == 思考题
87
+
88
+ 思考如何进一步优化成一维数组?
89
+
89
90
90
91
== 参考资料
91
92
92
93
. https://leetcode.cn/problems/edit-distance/solutions/189676/edit-distance-by-ikaruga/[72. 编辑距离 - 【编辑距离】入门动态规划,你定义的 dp 里到底存了啥^]
93
94
. 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. 编辑距离 - 【视频】教你一步步思考动态规划,从记忆化搜索到递推到空间优化!^] -- 从递归到动态规划,从矩阵到一维数组,逐步优化。
94
96
95
97
Original file line number Diff line number Diff line change @@ -373,6 +373,11 @@ endif::[]
373
373
|{doc_base_url} /0042-trapping-rain-water.adoc[题解]
374
374
|❌ 使用单调栈没写出来。使用单调栈,需 `h × w` ,不能只看头顶的容量。使用左右双指针夹逼代码更简单,只需要计算头顶的容量即可。
375
375
376
+ |{counter:codes}
377
+ |{leetcode_base_url} /edit-distance/[72. 编辑距离^]
378
+ |{doc_base_url} /0072-edit-distance.adoc[题解]
379
+ |✅ 动态规划。思考如何进一步优化成一维数组?
380
+
376
381
|===
377
382
378
383
截止目前,本轮练习一共完成 {codes2503} 道题。
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments