Skip to content

Commit c442bc5

Browse files
aQuaaQua
aQua
authored and
aQua
committed
115 accepted. 9ms > 0ms.
1 parent 62efb6c commit c442bc5

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed

Algorithms/0115.distinct-subsequences/distinct-subsequences.go

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,30 @@ package Problem0115
33
func numDistinct(s string, t string) int {
44
m, n := len(s), len(t)
55

6+
// dp[i][j] == numDistinct(s[:i], t[:j])
67
dp := make([][]int, m+1)
78
for i := 0; i <= m; i++ {
89
dp[i] = make([]int, n+1)
10+
// numDistinct(s[:i], "") == 1
11+
// s[:i] 删除所有的字符后,才会变成 "",只有这一种可能。
912
dp[i][0] = 1
1013
}
1114

1215
for j := 1; j <= n; j++ {
1316
for i := j; i <= m; i++ {
14-
if n-j <= m-i && s[i-1] == t[j-1] {
15-
dp[i][j] = dp[i-1][j-1] + dp[i-1][j]
16-
} else {
17-
dp[i][j] = dp[i-1][j]
17+
// 对于 dp[i][j] 来说
18+
// s[:i] 中符合条件的子字符串,按照是否包含 s[i-1],可以分成两个部分:
19+
// 第一部分:
20+
// **不**包含 s[i-1],
21+
// 这部分的数量,等于 dp[i-1]dp[j]
22+
dp[i][j] = dp[i-1][j]
23+
// 第二部分:
24+
// 包含 s[i-1]
25+
// 这部分,只有当 s[i-1] == t[j-1] 的时候,才存在
26+
// 存在的话,这部分的数量,等于 dp[i-1][j-1]
27+
if s[i-1] == t[j-1] {
28+
dp[i][j] += dp[i-1][j-1]
1829
}
19-
2030
}
2131
}
2232

0 commit comments

Comments
 (0)