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?