97. Interleaving String
# Hard 太难了
Solution:
class Solution:
def isInterleave(self, s1: str, s2: str, s3: str) -> bool:
# edge case
if len(s1)+len(s2) != len(s3):
return False
# interLeave[i][j] means if first i of s1 and j of s2 can be first (i+j) of s3 interleaving string
# initialize interLeave
interLeave = [[False]*(len(s2)+1) for i in range(len(s1)+1)]
interLeave[0][0] = True
for i in range(1, len(s1)+1):
if s1[:i] == s3[:i]:
interLeave[i][0] = True
for j in range(1, len(s2)+1):
if s2[:j] == s3[:j]:
interLeave[0][j] = True
# copmute
for i in range(1, len(s1)+1):
for j in range(1, len(s2)+1):
if s1[i-1] == s3[i+j-1] and interLeave[i-1][j] == True:
interLeave[i][j] = True
if s2[j-1] == s3[i+j-1] and interLeave[i][j-1] == True:
interLeave[i][j] = True
return interLeave[len(s1)][len(s2)]Last updated