File tree Expand file tree Collapse file tree 1 file changed +15
-5
lines changed
Algorithms/0115.distinct-subsequences Expand file tree Collapse file tree 1 file changed +15
-5
lines changed Original file line number Diff line number Diff line change @@ -3,20 +3,30 @@ package Problem0115
3
3
func numDistinct (s string , t string ) int {
4
4
m , n := len (s ), len (t )
5
5
6
+ // dp[i][j] == numDistinct(s[:i], t[:j])
6
7
dp := make ([][]int , m + 1 )
7
8
for i := 0 ; i <= m ; i ++ {
8
9
dp [i ] = make ([]int , n + 1 )
10
+ // numDistinct(s[:i], "") == 1
11
+ // s[:i] 删除所有的字符后,才会变成 "",只有这一种可能。
9
12
dp [i ][0 ] = 1
10
13
}
11
14
12
15
for j := 1 ; j <= n ; j ++ {
13
16
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 ]
18
29
}
19
-
20
30
}
21
31
}
22
32
You can’t perform that action at this time.
0 commit comments