这个微软面试的时候考过 双指针就行
编辑距离入门题:
思路是一样的 相同字符+1 否则从前面顺下来
class Solution:
def isSubsequence(self, s: str, t: str) -> bool:
dp=[[0]*(len(t)+1) for _ in range(len(s)+1)]
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]+1
else:
dp[i][j]=dp[i][j-1] #从前面顺过来
if dp[-1][-1]==len(s):
return True
return False
115. 不同的子序列
s和t是不对称的 尾端相同的情况相当于加一波可能性 第一行和第一列也不对称
这个要注意
class Solution:
def numDistinct(self, s: str, t: str) -> 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]