当前位置: 首页 > article >正文

代码随想录算法训练营第四十五天| 139.单词拆分

文档讲解:代码随想录

视频讲解:代码随想录B站账号

状态:看了视频题解和文章解析后做出来了

139.单词拆分 

class Solution:
    def wordBreak(self, s: str, wordDict: List[str]) -> bool:
        n = len(s)
        dp = [False] * (n+1)
        dp[0] = True
        max_len = max(map(len, wordDict))

        for i in range(1, n+1):
            for j in range(i-1, max(i - max_len - 1, -1), -1):
                if dp[j] and s[j:i] in wordDict:
                    dp[i] = True

        return dp[n]
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(n)

1. 确定dp数组以及下标的含义

dp[i] : 字符串长度为i的话,dp[i]为true,表示可以拆分为一个或多个在字典中出现的单词。

 2. 确定递推公式

如果确定dp[j] 是true,且 [j, i] 这个区间的子串出现在字典里,那么dp[i]一定是true。(j < i )。

所以递推公式是 if([j, i] 这个区间的子串出现在字典里 && dp[j]是true) 那么 dp[i] = true。

3. dp数组的初始化

从递推公式中可以看出,dp[i] 的状态依靠 dp[j]是否为true,那么dp[0]就是递推的根基,dp[0]一定要为true,否则递推下去后面都都是false了。

4. 遍历顺序

这道题其实求的是排列,只有所有排列的方式都遍历一边,才能确定wordict能否组成目标字符串。

所以先遍历背包再遍历物品,从前往后遍历。 

5. dp数组举例


http://www.kler.cn/a/136513.html

相关文章:

  • 【Maui】动态菜单实现(绑定数据视图)
  • 利用AI大模型和Mermaid生成流程图
  • “深入浅出”系列之QT:(6)如何在一个项目中调用另一个项目
  • Nginx:Stream模块
  • 【Linux 之 二十 】使用 ln 命令创建符号链接
  • 卷积神经网络 (CNN, Convolutional Neural Network) 算法详解与PyTorch实现
  • 模具制造厂ERP都有哪些牌子?模具制造厂ERP有什么用
  • jenkins传参给robotframework
  • lenovo联想笔记本ThinkPad P1 Gen5/X1 Extreme Gen5原装出厂Windows11预装OEM系统
  • 机器学习-笔记
  • linux备份系统盘
  • 发送注册连接到 FreeSWITCH 服务器的客户端
  • 以makefile的方式在linux上编译代码(小白级别)
  • kubernetes测试部署一个nginx
  • 基于springboot实现智能热度分析和自媒体推送平台系统项目【项目源码】计算机毕业设计
  • 【python百宝箱】抛开GIL束缚:线程、进程、异步实现高效编程
  • 记录 ubuntu 硬盘分区跟格式化(fdisk命令)
  • 数据分析基础之《jupyter notebook工具》
  • 如何给shopify motion主题的产品系列添加description
  • PHP8新特性
  • 掌握源码,轻松搭建:一站式建站系统源码 附完整搭建步骤与教程
  • 这篇文章带你了解:如何一次性将Centos中Mysql的数据快速导出!!!
  • 44-设计问题-最小栈
  • nn.KLDivLoss,nn.CrossEntropyLoss,nn.MSELoss,Focal_Loss
  • 自动化运维中间件架构概况
  • Redis变慢怎么办?