This commit is contained in:
krahets
2023-07-14 02:56:23 +08:00
parent 1ad1db6730
commit ca501f0c9a
6 changed files with 163 additions and 16 deletions

View File

@@ -35,7 +35,7 @@ comments: true
- 若 $s[n-1]$ 和 $t[m-1]$ 相同,我们可以直接跳过它们,接下来考虑 $s[n-2]$ 和 $t[m-2]$ ;
- 若 $s[n-1]$ 和 $t[m-1]$ 不同,我们需要对 $s$ 进行一次编辑(插入、删除、替换),使得两字符串尾部的字符相同,从而可以跳过它们,考虑规模更小的问题;
也就是说,我们在字符串 $s$ 中进行的每一轮决策(编辑操作),都会使得 $s$ 和 $t$ 中剩余的待匹配字符发生变化。因此,状态定义为当前在 $s$ , $t$ 中考虑的第 $i$ , $j$ 个字符,记为 $[i, j]$ 。
也就是说,我们在字符串 $s$ 中进行的每一轮决策(编辑操作),都会使得 $s$ 和 $t$ 中剩余的待匹配字符发生变化。因此,状态为当前在 $s$ , $t$ 中考虑的第 $i$ , $j$ 个字符,记为 $[i, j]$ 。
状态 $[i, j]$ 对应的子问题:**将 $s$ 的前 $i$ 个字符更改为 $t$ 的前 $j$ 个字符所需的最少编辑步数**。
@@ -45,7 +45,7 @@ comments: true
考虑子问题 $dp[i, j]$ ,其对应的两个字符串的尾部字符为 $s[i-1]$ 和 $t[j-1]$ ,可根据不同编辑操作分为三种情况:
1. 在 $s$ 尾部添加 $t[j-1]$ ,则剩余子问题 $dp[i, j-1]$
1. 在 $s[i-1]$ 之后添加 $t[j-1]$ ,则剩余子问题 $dp[i, j-1]$
2. 删除 $s[i-1]$ ,则剩余子问题 $dp[i-1, j]$
3. 将 $s[i-1]$ 替换为 $t[j-1]$ ,则剩余子问题 $dp[i-1, j-1]$