【动态规划-7】139.单词拆分
题目描述给你一个字符串s和一个字符串列表wordDict作为字典。如果可以利用字典中出现的一个或多个单词拼接出s则返回true。注意不要求字典中出现的单词全部都使用并且字典中的单词可以重复使用。示例 1输入:s leetcode, wordDict [leet, code]输出:true解释:返回 true 因为 leetcode 可以由 leet 和 code 拼接成。示例 2输入:s applepenapple, wordDict [apple, pen]输出:true解释:返回 true 因为 applepenapple 可以由 apple pen apple 拼接成。 注意你可以重复使用字典中的单词。示例 3输入:s catsandog, wordDict [cats, dog, sand, and, cat]输出:false解题思路方法一动态规划核心思路状态定义dp[i] 字符串s的前i个字符能否由字典中的单词拼接而成。状态转移对于每个位置i枚举j从0到i-1如果dp[j] true且s[j..i-1]在字典中则dp[i] truedp[i] dp[j] wordDict.count(s.substr(j, i-j))初始化dp[0] true空字符串可以被拼接具体过程示例s leetcode, wordDict [leet, code]dp[0] true i1: 检查 s[0..0]l → 不在字典 → dp[1]false i2: 检查 s[0..1]le → 不在字典 → dp[2]false i3: 检查 s[0..2]lee → 不在字典 → dp[3]false i4: 检查 s[0..3]leet → 在字典dp[0]true → dp[4]true i5: 检查 s[0..4]leetc → 不在 检查 s[4..4]c → 不在 → dp[5]false i6: 检查 s[4..5]co → 不在 → dp[6]false i7: 检查 s[4..6]cod → 不在 → dp[7]false i8: 检查 s[4..7]code → 在字典dp[4]true → dp[8]true ✅代码实现class Solution { public: bool wordBreak(string s, vectorstring wordDict) { unordered_setstring dict(wordDict.begin(), wordDict.end()); int n s.size(); vectorbool dp(n 1, false); dp[0] true; for (int i 1; i n; i) { for (int j 0; j i; j) { if (dp[j] dict.count(s.substr(j, i - j))) { dp[i] true; break; } } } return dp[n]; } };复杂度分析设n是字符串长度m是字典大小。维度复杂度说明时间复杂度O(n² × L)双重循环 子串查找L 是子串长度空间复杂度O(n)dp 数组 哈希表更精确子串s.substr(j, i-j)创建需要 O(L) 时间所以是 O(n² × L)。关键细节1. 为什么dp[0] true空字符串可以被拼接什么都不选是递推的起点。2. 为什么用unordered_set字典需要频繁查找哈希表查找 O(1)比遍历数组快。3. 为什么break一旦dp[i] true不需要继续枚举j提前结束内层循环。4. 和「单词拆分 II」的区别题目区别139. 单词拆分判断能否拆分140. 单词拆分 II返回所有拆分方案方法二记忆化搜索DFS 备忘录代码实现class Solution { public: bool wordBreak(string s, vectorstring wordDict) { unordered_setstring dict(wordDict.begin(), wordDict.end()); unordered_mapint, bool memo; return dfs(s, dict, 0, memo); } private: bool dfs(string s, unordered_setstring dict, int start, unordered_mapint, bool memo) { if (start s.size()) return true; if (memo.count(start)) return memo[start]; for (int end start 1; end s.size(); end) { string word s.substr(start, end - start); if (dict.count(word) dfs(s, dict, end, memo)) { memo[start] true; return true; } } memo[start] false; return false; } };复杂度时间 O(n² × L)空间 O(n)方法三BFS代码实现class Solution { public: bool wordBreak(string s, vectorstring wordDict) { unordered_setstring dict(wordDict.begin(), wordDict.end()); int n s.size(); vectorbool visited(n, false); queueint q; q.push(0); while (!q.empty()) { int start q.front(); q.pop(); if (visited[start]) continue; visited[start] true; for (int end start 1; end n; end) { if (dict.count(s.substr(start, end - start))) { if (end n) return true; q.push(end); } } } return false; } };复杂度时间 O(n² × L)空间 O(n)三种方法对比方法时间复杂度空间复杂度推荐度动态规划O(n² × L)O(n)⭐⭐⭐⭐⭐记忆化搜索O(n² × L)O(n)⭐⭐⭐⭐BFSO(n² × L)O(n)⭐⭐⭐总结要点说明核心思想dp[i]表示前 i 个字符能否被拼接状态转移dp[i] dp[j] s[j..i-1] 在字典中初始化dp[0] true时间复杂度O(n² × L)空间复杂度O(n)

相关新闻

昆明盘龙汽车贴隔热膜、贴车衣、改色膜去哪家?2026 年度精选优质门店推荐

昆明盘龙汽车贴隔热膜、贴车衣、改色膜去哪家?2026 年度精选优质门店推荐

2026 年,昆明汽车后市场持续向品质化、专业化方向升级。盘龙作为昆明北市区核心城区之一,新能源车、家用 SUV、中高端轿车和个性化改色需求集中,车主对隐形车衣、隔热窗膜和汽车改色膜的关注度越来越高。昆明属于高原城市,日照强、…

2026/10/10 21:56:44 阅读更多 →
电子元器件商城排行榜:2026年值得关注的5家真实平台

电子元器件商城排行榜:2026年值得关注的5家真实平台

"2026电子元器件商城 TOP10"——这类榜单每年都被刷屏。但80%的榜单排序逻辑是"谁给的广告费多",不是"谁的真实能力强"。真正可信的元器件平台排行,必须同时满足3个标准:真实规模可核验、资质有第三方公示、不…

2026/10/10 21:56:44 阅读更多 →
IL-4与肿瘤免疫逃逸:从STAT6信号到IL-4Rα靶向治疗

IL-4与肿瘤免疫逃逸:从STAT6信号到IL-4Rα靶向治疗

1. 在肿瘤免疫里,IL-4为什么是个“难缠”的分子1.1 从一个矛盾的数据说起我最早注意到IL-4这分子,不是因为在哪个教科书上读到它,而是因为看免疫治疗耐药数据看得头皮发麻。同一个癌种,同样的PD-1抑制剂,有人病灶明显缩…

2026/10/10 21:56:44 阅读更多 →

最新新闻

初学者必知:llm.txt是干什么用的?TaoToken 统一 Key 接入 AI 编程助手实操

初学者必知:llm.txt是干什么用的?TaoToken 统一 Key 接入 AI 编程助手实操

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 23:27:01 阅读更多 →
子序列动态规划四题详解:LCS、不相交的线、最大子序和、判断子序列

子序列动态规划四题详解:LCS、不相交的线、最大子序和、判断子序列

刷动态规划刷到第四十三天,说实话到这个阶段很多人已经有点晕了。前面的背包问题刚消化完,今天又上来四道子序列相关的题——1143.最长公共子序列、1035.不相交的线、53.最大子序和、392.判断子序列。如果你正在跟代码随想录的算法营,或者自己…

2026/10/10 23:27:01 阅读更多 →
拆解OpenClaw on Android的平台插件架构:L1/L2/L3三层依赖设计完全解读(开发者向)

拆解OpenClaw on Android的平台插件架构:L1/L2/L3三层依赖设计完全解读(开发者向)

移动开发AI 应用CLI开发工具 【免费下载链接】openclaw-android Run OpenClaw on Android with a single command — no proot, no Linux 项目地址: https://gitcode.com/gh_mirrors/op/openclaw-android 点击查看 免费下载 OpenClaw on Android 是一个在 Android&…

2026/10/10 23:27:01 阅读更多 →
Plate 开源仓库的 Agent 协作规范与工程化开发工作流指南

Plate 开源仓库的 Agent 协作规范与工程化开发工作流指南

前端富文本UI组件 【免费下载链接】plate Rich-text editor with AI and shadcn/ui 项目地址: https://gitcode.com/GitHub_Trending/pl/plate 点击查看 免费下载 本篇指南以 Plate 仓库根目录下的 .agents/AGENTS.md 为骨架,系统讲解这套面向 AI Agent…

2026/10/10 23:27:01 阅读更多 →
vLLM 与 TGI 推理服务系统性能对比:TaoToken 统一 API 通道下的压测与调优实践

vLLM 与 TGI 推理服务系统性能对比:TaoToken 统一 API 通道下的压测与调优实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 23:27:01 阅读更多 →
后端开发第一课:从HTTP、接口到数据库的完整链路入门

后端开发第一课:从HTTP、接口到数据库的完整链路入门

后端开发这个方向,几乎每年都被拿出来讨论一遍。我见过不少刚转行或者刚入学的朋友,第一周还兴致勃勃,第二周就开始被各种名词轮番轰炸:接口、数据库、缓存、部署、框架、中间件……每个字都认识,连在一起就不知道在说…

2026/10/10 23:26:00 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →