【算法与数据结构】139、LeetCode单词拆分
文章目录
- 一、题目
- 二、解法
- 三、完整代码
所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。
一、题目

二、解法
思路分析:本题可以看做一个动态规划问题。其中,字符串s是背包,而字典中的单词就是物品。题目问的是单词能否组成字符串s,就是问物品能不能把背包装满。字典中的单词可以重复使用,因此是一个完全背包问题。
- 第一步, d p [ j ] dp[j] dp[j]的含义。 d p [ j ] dp[j] dp[j]代表的是字符串长度为 j j j时,该能否由字典中的单词构成。如果能,则为true。
- 第二步,递推公式。如果确定 d p [ j ] dp[j] dp[j]是true,且 [ j , i ] [j, i] [j,i]这个区间的子串出现在字典里,那么 d p [ i ] dp[i] dp[i]一定是true。 ( j < i ) (j < i ) (j<i)。所以递推公式是:
if(dp[j] && [j, i]这个区间的子串出现在字典里) dp[i] = true - 第三部,元素初始化。 d p [ 0 ] dp[0] dp[0]初始化为1。
- 第四部,递归顺序。本题严格划分起来是一个排列问题。以s = “applepenapple”, wordDict = [“apple”, “pen”] 为例。我们要求 物品的组合一定是 “apple” + “pen” + “apple” 才能组成 “applepenapple”。“apple” + “apple” + “pen” 或者 “pen” + “apple” + “apple” 是不可以的,那么我们就是强调物品之间顺序。所以说,本题一定是先遍历背包,再遍历物品。
- 第五步,打印结果。
为了判断 [ j , i ] [j, i] [j,i]这个区间的子串出现在字典里,我们构建了一个无序集合。其底层实现是一个哈希表,可以在常数时间内( O ( 1 ) O(1) O(1))内进行查找。
程序如下:
class Solution {
public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string> wordSet(wordDict.begin(), wordDict.end());vector<bool> dp(s.size() + 1, 0);dp[0] = 1;for (int i = 1; i <= s.size(); i++) { // 遍历背包(字符串s)for (int j = 0; j < i; j++) { // 遍历物品(单词)string key = s.substr(j, i - j);if (dp[j] && wordSet.find(key) != wordSet.end()) {dp[i] = 1;}}}return dp[s.size()];}
};
复杂度分析:
- 时间复杂度: O ( n 3 ) O(n^3) O(n3)。除了两层循环以外,还有需要substr返回子串,它是O(n)的复杂度(这里的n是substring的长度)。
- 空间复杂度: O ( n ) O(n) O(n)。
三、完整代码
# include <iostream>
# include <vector>
# include <string>
# include <unordered_set>
using namespace std;class Solution {
public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string> wordSet(wordDict.begin(), wordDict.end());vector<bool> dp(s.size() + 1, 0);dp[0] = 1;for (int i = 1; i <= s.size(); i++) { // 遍历背包(字符串s)for (int j = 0; j < i; j++) { // 遍历物品(单词)string key = s.substr(j, i - j);if (dp[j] && wordSet.find(key) != wordSet.end()) {dp[i] = 1;}}}return dp[s.size()];}
};int main() {string s = "catsandog";vector<string> wordDict = { "cats", "dog", "sand", "and", "cat" };Solution s1;bool result = s1.wordBreak(s, wordDict);cout << result << endl;system("pause");return 0;
}
end
相关文章:
【算法与数据结构】139、LeetCode单词拆分
文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:本题可以看做一个动态规划问题。其中,字符串s是背包,而字典中的单词就是物品。…...
NLP任务之Named Entity Recognition
深度学习的实现方法: 双向长短期记忆网络(BiLSTM): BiLSTM是一种循环神经网络(RNN)的变体,能够捕捉序列数据中的长期依赖关系。在NER任务中,BiLSTM能有效地处理文本序列,捕捉前后文本…...
NUXT3项目实践总结
目录 一、NUXT3实现黑夜白天模式切换 需求 实现 效果 二、scrollreveal插件实现动画效果 需求 实现 封装 使用 文档 效果 三、useSeoMeta的使用 作用 使用 效果 四、NUXT3开启代理 使用 注意 五、$fetch、useFetch 、useAsyncData的区别 六、错误页面处理 …...
中科星图——2020年全球30米地表覆盖精细分类产品V1.0(29个地表覆盖类型)
数据名称: 2020年全球30米地表覆盖精细分类产品V1.0 GLC_FCS30 长时序 地表覆盖 动态监测 全球 数据来源: 中国科学院空天信息创新研究院 时空范围: 2015-2020年 空间范围: 全球 数据简介: 地表覆盖分布…...
Tomcat 部署项目时 war 和 war exploded区别
在 Tomcat 调试部署的时候,我们通常会看到有下面 2 个选项。 是选择war还是war exploded 这里首先看一下他们两个的区别: war 模式:将WEB工程以包的形式上传到服务器 ;war exploded 模式:将WEB工程以当前文件夹的位置…...
【开源】SpringBoot框架开发天然气工程运维系统
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统角色分类2.2 核心功能2.2.1 流程 12.2.2 流程 22.3 各角色功能2.3.1 系统管理员功能2.3.2 用户服务部功能2.3.3 分公司(施工单位)功能2.3.3.1 技术员角色功能2.3.3.2 材料员角色功能 2.3.4 安…...
go数据操作-MySQL
1.快速入门 下载依赖 go get -u github.com/go-sql-driver/mysql使用MySQL驱动 func Open(driverName, dataSourceName string) (*DB, error)Open打开一个dirverName指定的数据库,dataSourceName指定数据源,一般至少包括数据库文件名和其它连接必要的…...
基于node.js和Vue3的医院挂号就诊住院信息管理系统
摘要: 随着信息技术的快速发展,医院挂号就诊住院信息管理系统的构建变得尤为重要。该系统旨在提供一个高效、便捷的医疗服务平台,以改善患者就医体验和提高医院工作效率。本系统基于Node.js后端技术和Vue3前端框架进行开发,利用其…...
Django如何调用机器学习模型进行预测
Django是一个流行的Python Web框架,它可以很方便地集成机器学习模型,进行预测和推理。我将介绍如何在Django项目中调用训练好的机器学习模型,并实现一个预测接口。 准备工作 首先我们需要一个训练好的机器学习模型。这里我们使用Scikit-Learn训练一个简单的线性回归模型作为示…...
Web3.0初探
Web3.0初探 一、互联网发展史二、什么是Web3.0?三、现在的发展方向(衍生出来的产品):四、目前问题五、Web3.0与元宇宙 一、互联网发展史 Web3.0也就是第三代互联网。最新版本的Web3.0是以太坊的创始合伙人Gavin Wood在2014年提出…...
在windows和Linux中的安装 boost 以及 安装 muduo 和 mysql
一、CMake安装 Ubuntu Linux 下安装和卸载cmake 3.28.2版本-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/135960115?spm1001.2014.3001.5501二、安装boost boost官网:boost官网 我下载的boost版本: windows:boost_1_84_0.zipli…...
WPOpenSocial实现WordPress的QQ登录
个人建站不可避免的需要自己搭建用户数据库的问题,可用户却往往因为注册繁琐而放弃浏览您的网站,由此可见,一个社交账号一键登录方式尤为重要。选择适合您网站需求的社交插件,可以提升用户互动,增加社交分享࿰…...
关于我用AI编写了一个聊天机器人……(7)
此次更新为v1.3.4版本,更新内容:增加显示时间功能 代码如下: #include <bits/stdc.h> #include <ctime> using namespace std; string userInput; class VirtualRobot { public:void chat() {cout << "你好&#x…...
WebService的services.xml问题
WebService有多种实现方式,这里使用的是axis2 问题: 在本地开发,访问本地的http://localhost:8080/services/ims?wsdl,正常访问 但是打成jar包,不管是linux还是window启动,都访问不到,报错…...
永久删除 Elasticsearch 中的主节点
Elasticsearch 是一个开源分布式搜索和分析引擎,用于各种任务,例如全文搜索、日志分析和实时数据分析。 Elasticsearch 集群由一个或多个节点组成,每个节点可以具有多种角色,包括主节点(master node)、数据…...
从搜索引擎到答案引擎:LLM驱动的变革
在过去的几周里,我一直在思考和起草这篇文章,认为谷歌搜索正处于被颠覆的边缘,它实际上可能会影响 SEO 作为业务牵引渠道的可行性。 考虑到谷歌二十多年来的完全统治地位,以及任何竞争对手都完全无力削弱它,坦率地说&…...
IDEA如何进行远程Debug调试
背景: 使用docker进行CVE漏洞复现的时候,由于只能黑盒进行复现,并不能知道为什么会产生这个漏洞,以及漏洞的POC为什么要这么写,之前我都是通过本地debug来进行源码分析,后来搜了一下,发现可以进…...
故障诊断 | 一文解决,GRU门控循环单元故障诊断(Matlab)
文章目录 效果一览文章概述专栏介绍模型描述源码设计参考资料效果一览 文章概述 故障诊断 | 一文解决,GRU门控循环单元故障诊断(Matlab) 专栏介绍 订阅【故障诊断】专栏,不定期更新机器学习和深度学习在故障诊断中的应用;订阅...
C语言数据结构之二叉树
少年恃险若平地 独倚长剑凌清秋 🎥烟雨长虹,孤鹜齐飞的个人主页 🔥个人专栏 🎥前期回顾-栈和队列 期待小伙伴们的支持与关注!!! 目录 树的定义与判定 树的定义 树的判定 树的相关概念 树的运用…...
《HTML 简易速速上手小册》第1章:HTML 入门(2024 最新版)
文章目录 1.1 HTML 简介与历史(😉🌐👽踏上神奇的网页编程之旅)1.1.1 从过去到现在的华丽蜕变1.1.2 市场需求 —— HTML的黄金时代1.1.3 企业中的实际应用 —— 不只是个网页1.1.4 职业前景 —— 未来属于你 1.2 基本 H…...
10M参数也能跑ARC与数独,Bengio团队押注「多轨迹推理」
10M 参数跑到数独 97%,GRAM 把递归推理改成多轨迹采样。 10M 参数,在大模型时代显得有些微不足道。 但 Yoshua Bengio 团队与 KAIST、Mila、NYU 研究人员提出的 GRAM,用这个量级的模型跑出了几组值得注意的结果。 在 Sudoku-Extreme 上准确率…...
从选刊到综述:GPT到底在学术写作上升级了什么?
各位同仁好,我是七哥。一个在高校里从事人工智能相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude等大模型学术实操相关问题,多多交流,相互成就,共同进步。 导师把选题报告打回来,批注栏里写着:“创新点不够清晰,建议重新梳理研…...
硬核盘点!2026AI写作辅助软件大盘点(覆盖 99% 毕业论文需求)
本文精选13 款2026 年实测 AI 论文工具,按全流程全能型、垂直领域专精型、润色降重专家、文献管理助手四大类别排序,覆盖从选题到定稿全链路,适配本科 / 硕博 / 期刊全场景,附选型速查表与避坑指南,帮你快速找到最佳拍…...
免费中医AI终极指南:仲景大模型如何让普通人也能享受专业中医咨询
免费中医AI终极指南:仲景大模型如何让普通人也能享受专业中医咨询 【免费下载链接】CMLM-ZhongJing 首个中医大语言模型——“仲景”。受古代中医学巨匠张仲景深邃智慧启迪,专为传统中医领域打造的预训练大语言模型。 The first-ever Traditional Chines…...
为什么你的DeepSeek微调收敛慢?揭秘Attention初始化偏差导致的3轮内loss震荡——附自动校准工具脚本
更多请点击: https://intelliparadigm.com 第一章:DeepSeek注意力机制优化 DeepSeek系列模型在长上下文建模中对标准Transformer注意力进行了系统性重构,核心聚焦于降低计算复杂度与提升内存局部性。其注意力优化并非单一技术点叠加…...
NotebookLM视频处理突然变慢?紧急排查清单:GPU卸载阈值、音频采样率陷阱、语言模型缓存泄漏
更多请点击: https://codechina.net 第一章:NotebookLM视频转文字 NotebookLM 原生不支持直接上传视频文件进行转录,但可通过将视频中的音频提取为标准格式(如 WAV 或 MP3),再借助 Google 的 Speech-to-Te…...
NotebookLM效应量计算合规性危机:FDA/EMA/NMPA最新AI辅助研究指南对效应量报告的强制性要求(附自查清单V2.3)
更多请点击: https://intelliparadigm.com 第一章:NotebookLM效应量计算合规性危机的定义与背景 NotebookLM 效应量计算合规性危机,是指当研究者在使用 Google NotebookLM(一款基于 LLM 的文档理解与推理工具)辅助开展…...
PaddleOCR车牌识别实战:从3万张数据集处理到模型训练部署的完整避坑指南
PaddleOCR车牌识别实战:从3万张数据集处理到模型训练部署的完整避坑指南 车牌识别作为计算机视觉领域的经典应用场景,在智慧交通、安防监控、停车场管理等行业有着广泛需求。PaddleOCR作为国内领先的OCR开源框架,凭借其优异的性能和丰富的预训…...
量子噪声环境下资源恢复实验与NISQ计算优化
1. 量子噪声环境下的资源恢复实验概述在当前的含噪声中等规模量子(NISQ)计算时代,量子硬件面临的最大挑战之一是如何在存在显著噪声的情况下保持量子态的相干性和有用性。我们设计了一系列实验来探究噪声对量子资源(如纠缠和魔法态…...
CANN asc-devkit C API向量归约函数
asc_pair_reduce_sum 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gi…...
