动态规划代码:
dp[i][j]表示s[:i]子序列中t[:j]出现了几次- 当前字符不同,那么状态转移
dp[i][j] = dp[i-1][j] - 相同则
dp[i][j] = dp[i-1][j-1] + dp[i-1][j]
func numDistinct(s, t string) int {
a, b := len(s), len(t)
if a < b {
return 0
}
dp := make([][]int, a+1)
for i := range dp {
dp[i] = make([]int, b+1)
dp[i][0] = 1
}
for i := 1; i <= a; i++ {
for j := 1; j <= b; j++ {
if s[i-1] == t[j-1] {
dp[i][j] = dp[i-1][j-1] + dp[i-1][j]
}else {
dp[i][j] = dp[i-1][j]
}
}
}
return dp[a][b]
}