class Solution:
def numDistinct(self, s: str, t: str) -> int:
# dp二维数组
# s串中找t串出现的次数
dp = [[0]*(len(s)+1) for _ in range(len(t)+1)]
# 初始情况,两个串都为空串,s串中的t串个数变为1
dp[0][0] = 1
# 对于T串为空,S串不为空的情况,都有1种方法,因为空串这一种情况
for j in range(1,len(s)+1):
dp[0][j] = 1
# 对于S串为空,T串不为空的情况,肯定不行,所以方法数0
for i in range(1,len(t)+1):
dp[i][0]=0
# 其余情况,遍历
for i in range(1,len(t)+1):
for j in range(1,len(s)+1):
if s[j-1]==t[i-1]:
# 相等存在两个可选的情况,可以考虑t留下继续匹配还是不留下去掉该字符
dp[i][j]= dp[i-1][j-1]+dp[i][j-1]
else:
# 不相等则考虑,继续用当前t来匹配剩余的s
dp[i][j]= dp[i][j-1]
return dp[-1][-1]
09-23
392
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
09-12
488
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
08-14