dp方法
dp[i][j]表示構(gòu)成i長(zhǎng)度的t烘浦,用到j(luò)長(zhǎng)度的s,結(jié)果等于種類
轉(zhuǎn)移方程:
如果t[i]==s[j],dp[i][j]=dp[i-1][j-1]+dp[i][j-1]
否則:dp[i][j]=dp[i][j-1]
初始值:
dp[0][*]=1表示構(gòu)成0長(zhǎng)度的t妓忍,有一種方法
func numDistinct(s string, t string) int {
ls, lt := len(s), len(t)
dp := make([][]int, lt+1)
for k := range dp {
dp[k] = make([]int, ls+1)
}
for k := range dp[0] {
dp[0][k] = 1
}
for i := 1; i <= lt; i++ {
for j := 1; j <= ls; j++ {
if t[i-1] == s[j-1] {
dp[i][j] = dp[i][j-1] + dp[i-1][j-1]
} else {
dp[i][j] = dp[i][j-1]
}
}
}
return dp[lt][ls]
}