【算法题】word-break-ii àì夳堔傛蜴生んèń 2022-06-05 02:40 113阅读 0赞 此题是word-break的follow up,word-break用中规中矩的dp算法即可解决。 这个需要打印所有解决方案。 我用dp + dfs, leetcode和lintcode都可以通过。 时间复杂度:O(n方) 空间复杂度:O(n方) 题目: Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, add spaces in s to construct a sentence where each word is a valid dictionary word. You may assume the dictionary does not contain duplicate words. Return all such possible sentences. For example, given s = `"catsanddog"`, dict = `["cat", "cats", "and", "sand", "dog"]`. A solution is `["cats and dog", "cat sand dog"]`. 我的代码: class Solution { public: vector<string> res; vector<vector<int>> dp; vector<string> wordBreak(string s, vector<string> &wordDict) { // write your code here if (s.size() == 0 || wordDict.size() == 0) { return res; } int maxLength = 0; for (auto w : wordDict) { maxLength = max(maxLength, (int)w.size()); } for (int i = 0; i < s.size() + 1; i++) { dp.push_back(vector<int>()); } dp[0].push_back(0); for (int i = 1; i < s.size() + 1; i++) { for (int j = 1; j <= i && j <= maxLength; j++) { if (dp[i - j].size() != 0 && find(wordDict.begin(), wordDict.end(), s.substr(i - j, j)) != wordDict.end()) { dp[i].push_back(i - j); } } } for (int i = 0; i < dp[s.size()].size(); i++) { string res_element = ""; help(s, res_element, s.size(), dp[s.size()][i]); } return res; } void help(string s, string res_element, int pos, int last_pos) { if (last_pos == 0) { res_element = s.substr(0, pos) + " " + res_element; res_element = res_element.substr(0, res_element.size() - 1); res.push_back(res_element); return; } if (dp[last_pos].size() == 0) { return; } res_element = s.substr(last_pos, pos - last_pos) +" " + res_element; for (auto lp : dp[last_pos]) { help(s, res_element, last_pos, lp); } return; } };
相关 算法题刷题笔记 在线题库 > [牛客华为机试题库【题号 HJ开头】(重点看)][HJ] > [牛客在线编程算法篇【题号NC开头】][NC] > [剑指offer【题号 JZ开头】 深藏阁楼爱情的钟/ 2024年03月27日 11:33/ 0 赞/ 77 阅读
相关 经典算法题:排序算法 点击蓝色“五分钟学算法”关注我哟 加个“星标”,天天中午 12:15,一起学算法 ![640?wx\_fmt=jpeg][640_wx_fmt_jpeg] 作者 | 程序 深碍√TFBOYSˉ_/ 2023年06月08日 15:53/ 0 赞/ 3 阅读
相关 算法题汇总 1.冒泡排序 [https://juejin.cn/post/6948814177179795487][https_juejin.cn_post_694881417717 骑猪看日落/ 2022年10月07日 05:52/ 0 赞/ 181 阅读
相关 算法-刷题 剑指Offer快速过了一遍 字节-飞书高频题-前15 各公司的高频面试算法题,可在 [CodeTop][]查询 (1) 146. LRU 缓存机制 我的实现 桃扇骨/ 2022年09月09日 02:26/ 0 赞/ 237 阅读
相关 算法题 上学时学过的算法,青山遮不住,毕竟东流去,都忘得差不多了。。。。 题目1:使用一个数组实现一个循环队列 分析:简单来讲就是用一个数组,实现个队列的功能,可以用两个脚标来控制 我就是我/ 2022年06月10日 07:19/ 0 赞/ 159 阅读
相关 算法题分析 【题目描述】 在主城站街很久之后,小萌决定不能就这样的浪费时间虚度青春,他打算去打副本。 这次的副本只有一个BOSS,而且BOSS是不需要击杀的,只需要和它比智力……. ╰半橙微兮°/ 2022年06月05日 03:20/ 0 赞/ 188 阅读
相关 算法题 <table> <tbody> <tr> <td>N.RSA加密算法</td> </tr> <tr> <td> <table> 桃扇骨/ 2022年01月10日 10:23/ 0 赞/ 193 阅读
相关 一道算法题 package test.algo; import java.util.ArrayList; import java.util.Arrays; 梦里梦外;/ 2021年12月23日 06:31/ 0 赞/ 325 阅读
相关 其他算法题 绳子可以覆盖的最多点数 数轴上从左到右有n各点a\[0\], a\[1\], ……,a\[n -1\],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点 题解:对于 末蓝、/ 2021年09月18日 12:54/ 0 赞/ 323 阅读
还没有评论,来说两句吧...