140. 单词拆分 II(dfs)

发布时间:2026/10/12 16:55:00

140. 单词拆分 II(dfs) 链接140. 单词拆分 II题解140. 单词拆分 II - 力扣LeetCodeclass Solution { private: // 表示以key为下标开始value表示可以到达字符串末尾的清空 unordered_mapint, vectorstring ans; unordered_setstring wordSet; public: vectorstring wordBreak(string s, vectorstring wordDict) { wordSet unordered_set(wordDict.begin(), wordDict.end()); backtrack(s, 0); return ans[0]; } void backtrack(const string s, int index) { if (!ans.count(index)) { // 如果打到达末尾直接返回并且给ans[index]一个空 if (index s.size()) { ans[index] {}; return; } ans[index] {}; for (int i index 1; i s.size(); i) { //substr表示以index为开头长度为i-index string word s.substr(index, i - index); // 如果字典有这个 if (wordSet.count(word)) { // 回溯下一个字符以i为开始 backtrack(s, i); // 通过以i为开头的字符串获得以index为开头字符串的情况 // 如果succ为空表示当前word为最后一个字符串 for (const string succ: ans[i]) { ans[index].push_back(succ.empty() ? word : word succ); } } } } } };class Solution { public: vectorstring wordBreak(string s, vectorstring wordDict) { if (s.size() 0 || wordDict.size() 0) { return {}; } unordered_setstring dict(wordDict.begin(), wordDict.end()); vectorstring result; unordered_mapint, vectorstring memo; int begin 0; // 以begin开头返回的组合 return dfs(begin, s, result, dict, memo); // return memo[0]; } vectorstring dfs(int begin, const std::string s, vectorstring result, unordered_setstring dict, unordered_mapint, vectorstring memo) { // 如果begin计算过 if (memo.find(begin) ! memo.end()) { return memo[begin]; } if (begin s.size()) { string tmp; memo[begin].push_back(tmp); return {tmp}; } vectorstring sub_result; for (int i begin; i s.size(); i) { std::string str s.substr(begin, i-begin1); if (dict.find(str) dict.end()) { continue; } vectorstring suffix dfs(i1, s, result, dict, memo); // 组装一下i1后面返回成功的组合 for (auto s : suffix) { // 如果s是空则直接放入 if (s.empty()) { sub_result.push_back(str); } else { // 组合一下 string sub_str str s; sub_result.push_back(move(sub_str)); } } } // 存储计算结果 memo[begin] sub_result; return sub_result; } };class Solution { public: vectorstring wordBreak(string s, vectorstring wordDict) { if (s.size() 0 || wordDict.size() 0) { return {}; } unordered_setstring dict(wordDict.begin(), wordDict.end()); vectorstring result; unordered_mapint, vectorstring memo; int begin 0; // 以begin开头返回的组合 return dfs(begin, s, result, dict, memo); // return memo[0]; } vectorstring dfs(int begin, const std::string s, vectorstring result, unordered_setstring dict, unordered_mapint, vectorstring memo) { // 如果begin计算过 if (memo.find(begin) ! memo.end()) { return memo[begin]; } if (begin s.size()) { string tmp; memo[begin].push_back(tmp); return {tmp}; } vectorstring sub_result; for (int i begin; i s.size(); i) { std::string str s.substr(begin, i-begin1); if (dict.find(str) dict.end()) { continue; } vectorstring suffix dfs(i1, s, result, dict, memo); // 组装一下i1后面返回成功的组合 for (auto s : suffix) { // 如果s是空则直接放入 if (s.empty()) { sub_result.push_back(str); } else { // 组合一下 string sub_str str s; sub_result.push_back(move(sub_str)); } } } // 存储计算结果 memo[begin] sub_result; return sub_result; } };
延伸阅读

更多相关文章

2026/10/7 16:56:47

nom 模糊过滤器源码详解:fuzzy 匹配与正则提取器的实现原理

nom 模糊过滤器源码详解:fuzzy 匹配与正则提取器的实现原理 【免费下载链接】nom RSS reader for the terminal 项目地址: https://gitcode.com/gh_mirrors/nom1/nom nom 是一款运行在终端里的 RSS 阅读器,按 / 就能在成千上万篇文章中快速筛选。…

2026/10/12 16:52:45

HBase 2.0.2平台发行版部署实战:从解压到验证的完整避坑指南

简介:本资源为适配 ambari-2.7.5 编译环境的 HBase 离线安装包,面向大数据平台搭建与运维人员,用于解决编译过程中 hbase-2.0.2.3.1.4.0-315-bin.tar.gz 等大包下载缓慢、易中断的问题,可提前下载后放入本地仓库,加速集…

2026/10/12 16:52:45

RuoYi-Vue-Plus 集成 AgentScope Harness:在若依后台跑通 AI 智能体编排

1. 为什么我要把 AgentScope Harness 塞进一个若依系后台先交代背景:我在做某公司内部运维工单系统时,用的是 RuoYi-Vue-Plus 这套增强版后台框架。它原生自带用户、角色、菜单、字典、操作日志、代码生成这些能力,出业务 CRUD 页面非常快。但…

2026/10/11 0:02:13

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/12 12:01:26

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/12 12:54:07

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/12 0:04:22

绝缘子缺陷检测数据集清洗与工业级训练实战指南

简介:本资源是面向电力AI研发人员、工业视觉工程师及智能巡检系统开发者的绝缘子缺陷检测专用YOLO格式数据集,解决无人机航拍场景下绝缘子破损、污闪、积雪等9类典型缺陷的精准识别与定位难题。数据集共2139张真实巡检图像(含训练/验证/测试集…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑