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

news2024/11/17 1:30:25

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

  • 139.单词拆分

139.单词拆分

题目链接
视频讲解
给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s
注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用

输入: s = "leetcode", wordDict = ["leet", "code"]
输出: true

动规五部曲分析如下:
确定dp数组以及下标的含义
dp[i] : 字符串长度为i的话,dp[i]为true,表示可以拆分为一个或多个在字典中出现的单词
确定递推公式
如果确定dp[j] 是true,且 [j, i] 这个区间的子串出现在字典里,那么dp[i]一定是true。(j < i ),所以递推公式是 if([j, i] 这个区间的子串出现在字典里 && dp[j]是true) 那么 dp[i] = true
dp数组如何初始化
从递推公式中可以看出,dp[i] 的状态依靠 dp[j]是否为true,那么dp[0]就是递推的根基,dp[0]一定要为true,否则递推下去后面都都是false了
那么dp[0]有没有意义呢?
dp[0]表示如果字符串为空的话,说明出现在字典里
但题目中说了“给定一个非空字符串 s” 所以测试数据中不会出现i为0的情况,那么dp[0]初始为true完全就是为了推导公式
下标非0的dp[i]初始化为false,只要没有被覆盖说明都是不可拆分为一个或多个在字典中出现的单词
确定遍历顺序
题目中说是拆分为一个或多个在字典中出现的单词,所以这是完全背包
还要讨论两层for循环的前后顺序
如果求组合数就是外层for循环遍历物品,内层for遍历背包
如果求排列数就是外层for遍历背包,内层for循环遍历物品
本题求的是排列数,为什么呢。 拿 s = “applepenapple”, wordDict = [“apple”, “pen”] 举例
“apple”, “pen” 是物品,那么我们要求 物品的组合一定是 “apple” + “pen” + “apple” 才能组成 “applepenapple”
“apple” + “apple” + “pen” 或者 “pen” + “apple” + “apple” 是不可以的,那么我们就是强调物品之间顺序
所以说,本题一定是 先遍历 背包,再遍历物品
举例推导dp[i]
以输入: s = “leetcode”, wordDict = [“leet”, “code”]为例,dp状态如图:
在这里插入图片描述
dp[s.size()]就是最终结果

class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) {
        unordered_set<string> wordSet(wordDict.begin(), wordDict.end());
        vector<bool> dp(s.size() + 1, false);
        dp[0] = true;
        for (int i = 1; i <= s.size(); i++) {   // 遍历背包
            for (int j = 0; j < i; j++) {       // 遍历物品
                string word = s.substr(j, i - j); //substr(起始位置,截取的个数)
                if (wordSet.find(word) != wordSet.end() && dp[j]) {
                    dp[i] = true;
                }
            }
        }
        return dp[s.size()];
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/935041.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【效能平台】django项目中集成httprunner做接口测试补(五)

这里写目录标题 一、登录接口数据驱动测试1、定义登录api:api/login_api_form.yml2、定义login_testcases.yaml3、定义login_testcases.yaml4、debugtalk.py文件5、执行测试用例6、测试报告7、优先级:二、将httprunner集成到测试平台中一、登录接口数据驱动测试 1、定义登录a…

电脑视频编辑软件前十名 电脑视频编辑器怎么剪辑视频

对于大多数创作者而言&#xff0c;视频后期工作基本都是在剪辑软件上进行的。一款适合自己的视频剪辑软件&#xff0c;能够节省出大量的时间和金钱成本&#xff0c;让剪辑师省钱又省心。那么有关电脑视频编辑软件前十名&#xff0c;电脑视频编辑器怎么剪辑视频的相关问题&#…

【Python从入门到进阶】33、使用bs4获取星巴克产品信息

接上篇《32、bs4的基本使用》 上一篇我们介绍了BeautifulSoup的基本概念&#xff0c;以及bs4的基本使用&#xff0c;本篇我们来使用bs4来解析星巴克网站&#xff0c;获取其产品信息。 一、星巴克网站介绍 星巴克官网是星巴克公司的官方网站&#xff0c;用于提供关于星巴克咖啡…

收费文章怎么复制

1.复制这篇文章发现收费 2.电脑登录一个qq&#xff0c;截图找到这个屏幕视图 3.右边这个文字可以复制 4.这个只能识别一段一段复制

网卡重启,导致docker容器暴露端口都无法对外开放

公司内部网络ip冲突&#xff0c;重新分配了某个范围的ip后&#xff0c;修改网络信息&#xff08;位于/etc/sysconfig/network-scripts目录下对应网卡&#xff09;后&#xff0c;重启网卡&#xff08;systemctl restart network&#xff09;&#xff1b;后面导致docker容器暴露的…

计算机网络-笔记-第三章-数据链路层

目录 三、第三章——数据链路层 1、数据链路层概述&#xff08;帧&#xff09; &#xff08;1&#xff09;封装成帧、差错检测、可靠传输&#xff08;简单介绍&#xff09; &#xff08;2&#xff09;CSMA/CD 2、封装成帧 &#xff08;1&#xff09;透明传输&#xff08;…

JVM虚拟机:定位对象的两种方式

定位对象的方式 1、句柄池 2、直接指针 ‘句柄池 直接指针 在Java中&#xff0c;可以使用两种方式来定位对象&#xff1a;句柄池和直接指针。 1. 句柄池&#xff1a;在Java的句柄池模型中&#xff0c;Java虚拟机&#xff08;JVM&#xff09;会为每个对象创建一个句柄&#xff…

2022 ICPC 南京 M Drain the Water Tank(叉积 + 思维)

2022 ICPC 南京 M. Drain the Water Tank(叉积 思维) Problem - M - Codeforces 大意&#xff1a;给一个多边形 &#xff0c;多边形充满水 &#xff0c; 点集逆时针给出 &#xff0c; 求最少的出水阀门的数量使得水可以全部流出。 思路&#xff1a;通过画图发现 &#xff0…

vector VS deque

1. vector与deque vector与动态数组相同&#xff0c;能够在插入或删除元素时自动调整自身大小&#xff0c;其存储由容器自动处理&#xff0c;vector通常占用多于静态数组的空间&#xff0c;因为要分配更多的内存以管理将来的增长&#xff0c;在每次插入元素的时&#xff0c;仅…

红外与可见光图像融合入门教学

红外与可见光图像融合入门教学 什么是红外与可见光图像融合论文DeepFuseDenseFuseRFN-NestFusionGANDDcGANAttentionFGANGANMcC 总结 博主目前马上进入研二阶段&#xff0c;也算是入门了红外与可将光图像领域&#xff0c;正好总结下&#xff0c;以供刚接触该领域的萌新们参考。…

ADC模块之HX711

今天&#xff0c;回顾了HX711模数转换模块&#xff0c;HX711模块经常用于电子秤的设计。 模数转换模块的输入有三种&#xff08;HX711的输入为差分输入&#xff09;&#xff1a; HX711的驱动程序 #include "HX711.h"//********************************************…

自考《00058 市场营销学》2023年4月历年真题答案

自考科目列表,自考本科,题库,自学考试,历年真题。 1.某汽车制造商宣称“我们的汽车唯一的缺点就是生产得不够快”,该公司秉持的营销哲学是 A.产品导向 B.推销导向 C.顾客导向 D.生产导向 2.LM公司故意不履行和中间商合同约定的相关义务&#xff0c;不按时支付供货商的货款&…

Java入职第十一天,深入了解静态代理和动态代理(jdk、cglib)

一、代理模式 一个类代表另一个类去完成扩展功能,在主体类的基础上,新增一个代理类,扩展主体类功能,不影响主体,完成额外功能。比如买车票,可以去代理点买,不用去火车站,主要包括静态代理和动态代理两种模式。 代理类中包含了主体类 二、静态代理 无法根据业务扩展,…

火山引擎 DataLeap:从短视频 APP 实践看如何统一数据指标口径

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 短视频正在成为越来越多人发现世界的窗口&#xff0c;其背后的创作者生态建设是各大短视频 APP 不可忽视的重要组成部分。 为了激励更多优质内容生产&#xff0c;某…

下一代存储解决方案:湖仓一体

文章首发地址 湖仓一体是将数据湖和数据仓库相结合的一种数据架构&#xff0c;它可以同时满足大数据存储和传统数据仓库的需求。具体来说&#xff0c;湖仓一体可以实现以下几个方面的功能&#xff1a; 数据集成&#xff1a; 湖仓一体可以集成多个数据源&#xff0c;包括结构…

exe打包工具(收录)

收录&#xff1a; Advanced Installation静默安装包的制作方法 Advanced Installer打包exe安装包教程 Advanced Installer使用指南 advanced installer 使用常见问题整理 exe打包工具&#xff1a;advanced installer介绍

使用飞桨实现的第一个AI项目——波士顿的房价预测

part1.首先引入相应的函数库: 值得说明的地方&#xff1a; &#xff08;1&#xff09;首先&#xff0c;numpy是一个python库&#xff0c;主要用于提供线性代数中的矩阵或者多维数组的运算函数&#xff0c;利用import numpy as np引入numpy&#xff0c;并将np作为它的别名 part…

这可能是你看过最详细的 [八大排序算法]

排序算法 前置知识 [排序稳定性]一、直接插入排序二、希尔排序三、直接选择排序四、堆排序五、冒泡排序六、快速排序七、归并排序八、计数排序&#xff08;非比较排序&#xff09;排序复杂度和稳定性总结 前置知识 [排序稳定性] 假定在待排序的记录序列中&#xff0c;存在多个…

Docker 将容器打包成镜像推送镜像到仓库

Docker 将容器打包成镜像&推送镜像到仓库 一、将容器打包成镜像 $ docker commit <容器ID> <镜像名称:标签>示例&#xff1a; $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS …

FreeSWITCH 1.10.10 简单图形化界面5 - 使用百度TTS

FreeSWITCH 1.10.10 简单图形化界面5 - 使用百度TTS 0、 界面预览1、注册百度AI开放平台&#xff0c;开通语音识别服务2、获取AppID/API Key/Secret Key3、 安装百度语音合成sdk4、合成代码5、在PBX中使用百度TTS6、音乐文件-TTS7、拨号规则-tts_command 0、 界面预览 http://…