恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

【动态规划-7】139.单词拆分

  • 首页
  • 资讯中心
  • /
  • 【动态规划-7】139.单词拆分

相关资讯

昆明盘龙汽车贴隔热膜、贴车衣、改色膜去哪家?2026 年度精选优质门店推荐 2026/10/10 21:56:30
电子元器件商城排行榜:2026年值得关注的5家真实平台 2026/10/10 21:56:30
笔记本蓝牙驱动故障排查与稳定配置指南 2026/10/10 21:51:28

最新资讯

TensorRT部署YOLO实例分割与目标检测:从PyTorch到C++/Python跨平台实战
Sqoop处理BLOB/CLOB实战:导入导出、性能调优与踩坑指南
飞机检测数据集实战:VOC转YOLO格式与训练避坑指南
冷库叉车和电池跟常温仓有啥不一样?使用和充电怎么管
深圳货车限行,冷链城配怎么排路线和时间才能不迟到?
OpenAPI 规范 JSON Schema 归档全解析:从 Swagger 1.2 到 OAS 3.0 的验证体系

今日推荐

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动
统计随机数生成器攻击下的KLJN安全密钥交换协议Matlab仿真
政务API安全治理:资产测绘、低代码编排与行标对标实践

本周热门

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动
统计随机数生成器攻击下的KLJN安全密钥交换协议Matlab仿真
政务API安全治理:资产测绘、低代码编排与行标对标实践

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

【动态规划-7】139.单词拆分

发布时间:2026/10/10 21:56:30
【动态规划-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)

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号