题目:
给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。示例 1:输入:s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"输出:true示例 2:输入:s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"输出:false来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/interleaving-string著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
答案:
时间:
30min ,dp边界整的够呛,不过还好做出来了。
class Solution:def isInterleave(self, s1: str, s2: str, s3: str) -> bool:if len(s1)+len(s2)!=len(s3):return Falseif not s1:return s2==s3if not s2:return s1==s3if not s3:return Trues1="@"+s1s3="@"+s3n1,n2,n3=len(s1),len(s2),len(s3)dp=[[False]*(n1) for _ in range(n3)]dp[0][0]=Truefor i in range(1,n3):for j in range(min(n1,i+1)):k= i-j-1if s3[i]==s1[j]:dp[i][j]=dp[i][j] or dp[i-1][j-1]if 0<=k<n2 and s3[i]==s2[k]:dp[i][j]=dp[i][j] or dp[i-1][j]return dp[-1][-1]
