Skip to content

Commit b1f23cb

Browse files
authored
feat: detail the index difference between strings and DP table (#2602)
1 parent 1d1a4a4 commit b1f23cb

1 file changed

Lines changed: 9 additions & 1 deletion

File tree

动态规划系列/LCS.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,15 @@ class Solution {
242242

243243

244244

245-
自底向上的解法中 `dp` 数组定义的方式和我们的递归解法有一点差异,而且由于数组索引从 0 开始,有索引偏移,不过思路和我们的递归解法完全相同,如果你看懂了递归解法,这个解法应该不难理解。
245+
自底向上的解法中 `dp` 数组定义的方式和我们的递归解法有一点差异,不过思路和我们的递归解法完全相同,如果你看懂了递归解法,这个解法应该不难理解。
246+
247+
新手可能有一个注意不到的小细节: `s1.charAt(i - 1) == s2.charAt(j - 1)`,这里的字符串索引和 `dp` 数组索引并不一致,也称为**索引偏移**。回顾一下 `dp` 数组的定义:
248+
249+
```java
250+
// 定义:s1[0..i-1] 和 s2[0..j-1] 的 lcs 长度为 dp[i][j]
251+
```
252+
253+
在第 `i` 轮循环中改变的是 `dp[i]` 的值,此时按照定义,需要比较的是 `s1`**第 i 个字符**,也即 `s1[i-1]``s2[j-1]` 也是同理。这种细节在字符串类动态规划中非常常见,需要多加留意。
246254

247255
另外,自底向上的解法可以通过我们前文讲过的 [动态规划空间压缩技巧](https://labuladong.online/algo/dynamic-programming/space-optimization/) 来进行优化,把空间复杂度压缩为 O(N),这里由于篇幅所限,就不展开了。
248256

0 commit comments

Comments
 (0)