- 直接整了个 的暴力 dp 出来😅
- 直接跑了将近 10s 过了
之后再想想更优的方法ww
class Solution:
def isInterleave(self, s1: str, s2: str, s3: str) -> bool:
n = len(s1)
m = len(s2)
N = len(s3)
if n + m != N:
return False
f = []
for i in range(N+1):
f.append([])
for x in range(2):
f[i].append([])
for j in range(n+1):
f[i][x].append([False]*(m+1))
f[0][0][0][0] = f[0][1][0][0] = True
for i in range(1, N+1):
for j in range(1, min(i,n)+1):
for l in range(1, min(i,j)+1):
if s3[i-l] != s1[j-l]:
break
for k in range(0, min(i,m)+1):
if f[i-l][1][j-l][k]:
f[i][0][j][k] = True
break
for j in range(1, min(i,m)+1):
for l in range(1, min(i,j)+1):
if s3[i-l] != s2[j-l]:
break
for k in range(0, min(i,n)+1):
if f[i-l][0][k][j-l]:
f[i][1][k][j] = True
break
return f[N][0][n][m] or f[N][1][n][m]