Skip to content

Commit d863358

Browse files
committed
一刷72
1 parent a7154eb commit d863358

14 files changed

+132
-37
lines changed

README.adoc

+6-6
Original file line numberDiff line numberDiff line change
@@ -530,12 +530,12 @@ TIP: **公众号的微信号是: `jikerizhi`**。__因为众所周知的原因
530530
|Medium
531531
|
532532

533-
//|{counter:codes}
534-
//|{leetcode_base_url}/edit-distance/[72. Edit Distance^]
535-
//|{source_base_url}/_0072_EditDistance.java[Java]
536-
//|{doc_base_url}/0072-edit-distance.adoc[题解]
537-
//|Hard
538-
//|
533+
|{counter:codes}
534+
|{leetcode_base_url}/edit-distance/[72. Edit Distance^]
535+
|{source_base_url}/_0072_EditDistance.java[Java]
536+
|{doc_base_url}/0072-edit-distance.adoc[题解]
537+
|Hard
538+
|
539539

540540
|{counter:codes}
541541
|{leetcode_base_url}/set-matrix-zeroes/[73. Set Matrix Zeroes^]

docs/0000-00-note.adoc

+1
Original file line numberDiff line numberDiff line change
@@ -259,3 +259,4 @@ image::images/quick-sort-01.gif[{image_attr}]
259259
. https://github.com/doocs/leetcode[doocs/leetcode: 🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解^] -- 也可以在这里找题目
260260
. https://github.com/Chanda-Abdul/Several-Coding-Patterns-for-Solving-Data-Structures-and-Algorithms-Problems-during-Interviews[Several Coding Patterns for Solving Data Structures and Algorithms Problems during Interviews^] -- 多种解题范式总结
261261
. https://leetcode.cn/problems/climbing-stairs/solutions/2560716/jiao-ni-yi-bu-bu-si-kao-dong-tai-gui-hua-7zm1/?envType=study-plan-v2&envId=selected-coding-interview[70. 爬楼梯 - 教你一步步思考动态规划:从记忆化搜索到递推^]
262+
. https://leetcode.cn/circle/discuss/xV68NV/[不同层次的面试算法学习规划^]

docs/0072-edit-distance.adoc

+75-29
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,95 @@
11
[#0072-edit-distance]
2-
= 72. Edit Distance
2+
= 72. 编辑距离
33

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

6-
Given two words _word1_ and _word2_, find the minimum number of operations required to convert _word1_ to _word2_.
6+
给你两个单词 `+word1+``+word2+`
7+
_请返回将 `+word1+` 转换成 `+word2+` 所使用的最少操作数_
78

8-
You have the following 3 operations permitted on a word:
9+
你可以对一个单词进行如下三种操作:
910

11+
* 插入一个字符
12+
* 删除一个字符
13+
* 替换一个字符
1014
11-
. Insert a character
12-
. Delete a character
13-
. Replace a character
1415
1516
16-
*Example 1:*
17+
*示例1:*
1718

18-
[subs="verbatim,quotes,macros"]
19-
----
20-
*Input:* word1 = "horse", word2 = "ros"
21-
*Output:* 3
22-
*Explanation:*
23-
horse -> rorse (replace 'h' with 'r')
24-
rorse -> rose (remove 'r')
25-
rose -> ros (remove 'e')
26-
----
19+
....
20+
输入:word1 = "horse", word2 = "ros"
21+
输出:3
22+
解释:
23+
horse -> rorse (将 'h' 替换为 'r')
24+
rorse -> rose (删除 'r')
25+
rose -> ros (删除 'e')
26+
....
2727

28-
*Example 2:*
28+
*示例2:*
2929

30-
[subs="verbatim,quotes,macros"]
31-
----
32-
*Input:* word1 = "intention", word2 = "execution"
33-
*Output:* 5
34-
*Explanation:*
35-
intention -> inention (remove 't')
36-
inention -> enention (replace 'i' with 'e')
37-
enention -> exention (replace 'n' with 'x')
38-
exention -> exection (replace 'n' with 'c')
39-
exection -> execution (insert 'u')
40-
----
30+
....
31+
输入:word1 = "intention", word2 = "execution"
32+
输出:5
33+
解释:
34+
intention -> inention (删除 't')
35+
inention -> enention (将 'i' 替换为 'e')
36+
enention -> exention (将 'n' 替换为 'x')
37+
exention -> exection (将 'n' 替换为 'c')
38+
exection -> execution (插入 'u')
39+
....
40+
41+
*提示:*
42+
43+
* `+0 <= word1.length, word2.length <= 500+`
44+
* `+word1+``+word2+` 由小写英文字母组成
45+
46+
47+
== 思路分析
48+
49+
动态规划
50+
51+
`dp[i][j]` 代表 `word1` 中前 `i` 个字符,变换到 `word2` 中前 `j` 个字符,最短需要操作的次数。
4152

53+
image::images/0072-01.png[{image_attr}]
4254

55+
image::images/0072-02.png[{image_attr}]
56+
57+
image::images/0072-03.png[{image_attr}]
58+
59+
image::images/0072-04.png[{image_attr}]
60+
61+
image::images/0072-05.png[{image_attr}]
62+
63+
image::images/0072-06.png[{image_attr}]
64+
65+
image::images/0072-07.png[{image_attr}]
4366

4467
[[src-0072]]
68+
[tabs]
69+
====
70+
一刷::
71+
+
72+
--
4573
[{java_src_attr}]
4674
----
4775
include::{sourcedir}/_0072_EditDistance.java[tag=answer]
4876
----
77+
--
78+
79+
// 二刷::
80+
// +
81+
// --
82+
// [{java_src_attr}]
83+
// ----
84+
// include::{sourcedir}/_0072_EditDistance_2.java[tag=answer]
85+
// ----
86+
// --
87+
====
88+
89+
90+
== 参考资料
91+
92+
. https://leetcode.cn/problems/edit-distance/solutions/189676/edit-distance-by-ikaruga/[72. 编辑距离 - 【编辑距离】入门动态规划,你定义的 dp 里到底存了啥^]
93+
. https://leetcode.cn/problems/edit-distance/solutions/188223/bian-ji-ju-chi-by-leetcode-solution/[72. 编辑距离 - 官方题解^]
94+
4995

docs/images/0072-01.png

19.1 KB
Loading

docs/images/0072-02.png

31.9 KB
Loading

docs/images/0072-03.png

26 KB
Loading

docs/images/0072-04.png

30.7 KB
Loading

docs/images/0072-05.png

42.4 KB
Loading

docs/images/0072-06.png

35.8 KB
Loading

docs/images/0072-07.png

28.5 KB
Loading

docs/index.adoc

+1-1
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ include::0070-climbing-stairs.adoc[leveloffset=+1]
218218

219219
include::0071-simplify-path.adoc[leveloffset=+1]
220220

221-
// include::0072-edit-distance.adoc[leveloffset=+1]
221+
include::0072-edit-distance.adoc[leveloffset=+1]
222222

223223
include::0073-set-matrix-zeroes.adoc[leveloffset=+1]
224224

logbook/202406.adoc

+5
Original file line numberDiff line numberDiff line change
@@ -909,6 +909,11 @@
909909
|{doc_base_url}/0881-boats-to-save-people.adoc[题解]
910910
|❌ 贪心+双指针
911911
912+
|{counter:codes}
913+
|{leetcode_base_url}/edit-distance/[72. Edit Distance^]
914+
|{doc_base_url}/0072-edit-distance.adoc[题解]
915+
|❌ 动态规划,看答案秒懂,自己想不出来!
916+
912917
913918
|===
914919

src/main/java/com/diguage/algo/leetcode/_0071_SimplifyPath.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,13 @@
1313
* @since 2020-02-04 16:15
1414
*/
1515
public class _0071_SimplifyPath {
16-
// tag::answer[]
16+
// tag::answer[]
1717
/**
1818
* Runtime: 5 ms, faster than 71.14% of Java online submissions for Simplify Path.
1919
* Memory Usage: 39.9 MB, less than 6.67% of Java online submissions for Simplify Path.
20+
*
21+
* @author D瓜哥 · https://www.diguage.com
22+
* @since 2020-02-04 16:15
2023
*/
2124
public String simplifyPath(String path) {
2225
String[] paths = path.split("/");
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.diguage.algo.leetcode;
2+
3+
public class _0072_EditDistance {
4+
// tag::answer[]
5+
6+
/**
7+
* @author D瓜哥 · https://www.diguage.com
8+
* @since 2024-09-30 17:32:45
9+
*/
10+
public int minDistance(String word1, String word2) {
11+
int len1 = word1.length();
12+
int len2 = word2.length();
13+
// 1. 确定 dp[i][j] 含义
14+
int[][] dp = new int[len1 + 1][len2 + 1];
15+
// 3. 初始化基本状态
16+
for (int i = 0; i <= len1; i++) {
17+
dp[i][0] = i;
18+
}
19+
for (int i = 0; i <= len2; i++) {
20+
dp[0][i] = i;
21+
}
22+
// 确定遍历过程
23+
for (int i = 1; i <= len1; i++) {
24+
for (int j = 1; j <= len2; j++) {
25+
// 2. 确定转移方程
26+
if (word1.charAt(i - 1) == word2.charAt(j - 1)) {
27+
dp[i][j] = dp[i - 1][j - 1];
28+
} else {
29+
// 删除操作:dp[i - 1][j]
30+
// 增加操作:dp[i][j - 1]
31+
// 替换操作:dp[i - 1][j - 1]
32+
dp[i][j] = Math.min(Math.min(dp[i - 1][j], dp[i][j - 1]),
33+
dp[i - 1][j - 1]) + 1;
34+
}
35+
}
36+
}
37+
return dp[len1][len2];
38+
}
39+
// end::answer[]
40+
}

0 commit comments

Comments
 (0)