392. 判断子序列
题目链接:392. 判断子序列
这里要注意顺序问题,就是 abc 在 ahbgdc 而 acb 并不在其中。
class Solution(object):
def isSubsequence(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
dp=[[0]*(len(s)+1) for _ in range(len(t)+1)]
for i in range(1,len(t)+1):
for j in range(1,len(s)+1):
if s[j-1]==t[i-1]:
dp[i][j]=dp[i-1][j-1]+1
else:
dp[i][j]=max(dp[i-1][j],dp[i][j-1])
if dp[-1][-1]==len(s):
return True
else:
return False
115. 不同的子序列
题目链接:115. 不同的子序列
class Solution(object):
def numDistinct(self, s, t):
"""
:type s: str
:type t: str
:rtype: int
"""
dp = [[0] * (len(t)+1) for _ in range(len(s)+1)]
for i in range(len(s)):
dp[i][0] = 1
for j in range(1, len(t)):
dp[0][j] = 0
for i in range(1, len(s)+1):
for j in range(1, len(t)+1):
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[-1][-1]
这题比较难,递推公式比较难想到。