Featured image of post 115. 不同的子序列

115. 不同的子序列

题目描述

给你两个字符串 st ,统计并返回在 s子序列t 出现的个数。

题目数据保证答案符合 32 位带符号整数范围。

示例 1:

  • 输入:s = “rabbbit”, t = “rabbit”
  • 输出:3
  • 解释:如下所示, 有 3 种可以从 s 中得到 “rabbit” 的方案。
  • rabbbit
  • rabbbit
  • rabbbit**

示例 2:

  • 输入:s = “babgbag”, t = “bag”
  • 输出:5

提示:

  • 1 <= s.length, t.length <= 1000
  • st 由英文字母组成

解法一:动态规划

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
func numDistinct(s string, t string) int {
    h, w := len(s), len(t)
    if h < w {
        return 0
    }
    dp := make([][]int, h+1)
    for i := 0; i < h+1; i++ {
        dp[i] = make([]int, w+1)
        dp[i][w] = 1
    }
    for i := h - 1; i >= 0; i-- {
        for j := w - 1; j >= 0; j-- {
            if s[i] == t[j] {
                dp[i][j] = dp[i+1][j+1] + dp[i+1][j]
            } else {
                dp[i][j] = dp[i+1][j]
            }
        }
    }

    return dp[0][0]
}
Licensed under CC BY-NC-SA 4.0
最后更新于 2023/06/13 13:30:25
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计