Python 小白的 Leetcode Daily Challenge 刷题计划 - 20230825(军训第六晚)

​​​​​​97. Interleaving String

  • 直接整了个 O(N(nm^2+n^2m)) 的暴力 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]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值