class Solution:
def isInterleave(self, s1: str, s2: str, s3: str) -> bool:
#这个特殊情况可能会忘记,全为空的特殊情况
if len(s1)==len(s2)==len(s3)==0:
return True
#如果长度不满足要求不需要计算直接输出False
if len(s1)+len(s2)!=len(s3):
return False
#dp[i][j]表示s1的前i个字符与s2的前j个字符是否满足要求,这个较容易想到
dp=[[False for _ in range(len(s2)+1)] for _ in range(len(s1)+1)]
#初始化,dp[0][0]为True
dp[0][0]==True
#i行0列初始化,如果s1的前i个数与s3相同则为True
for i in range(1,len(s1)+1):
dp[i][0]=s1[:i]==s3[:i]
for i in range(1,len(s2)+1):
dp[0][i]=s2[:i]==s3[:i]
#dp[i][j]与前面已计算过的数据的关系,这里较容易想到
for i in range(1,len(s1)+1):
for j in range(1,len(s2)+1):
dp[i][j]=(dp[i-1][j] and s1[i-1]==s3[i+j-1]) or (dp[i][j-1] and s2[j-1]==s3[i+j-1])
return dp[-1][-1]
leetcode 97. 交错字符串
最新推荐文章于 2024-07-22 16:27:42 发布