Distinct Subsequences

题目描述

不同的子序列

给定一个字符串s和一个字符串t,计算在s的子序列中t出现的个数。

示例

输入:s = "rabbbit", t = "rabbit"
输出:3

解法

解法一:动态规划

  • 时间复杂度:O(mn)

  • 空间复杂度:O(mn)

func numDistinct(s string, t string) int {
    n, m := len(t), len(s)
    dp := make([][]int, n+1)
    for i := 0; i <= n; i++ {
        dp[i] = make([]int, m+1)
        for j := i; j <= m; j++ {
            if i == 0 {
                dp[i][j] = 1
                continue
            }
            if s[j-1] == t[i-1] {
                dp[i][j] = dp[i-1][j-1] + dp[i][j-1]
            } else {
                dp[i][j] = dp[i][j-1]
            }
        }
    }
    return dp[n][m]
}

Last updated

Was this helpful?