龙岩做网站的公司网站开发资源网
news/
2025/10/2 20:52:48/
文章来源:
龙岩做网站的公司,网站开发资源网,分销商城,网站后端开发软件1. 题目
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict#xff0c;在字符串中增加空格来构建一个句子#xff0c;使得句子中所有的单词都在词典中。返回所有这些可能的句子。
说明#xff1a; 分隔时可以重复使用字典中的单词。 你可以假设字典中没有重复的…1. 题目
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict在字符串中增加空格来构建一个句子使得句子中所有的单词都在词典中。返回所有这些可能的句子。
说明 分隔时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。
示例 1
输入:
s catsanddog
wordDict [cat, cats, and, sand, dog]
输出:
[cats and dog,cat sand dog
]示例 2
输入:
s pineapplepenapple
wordDict [apple, pen, applepen, pine, pineapple]
输出:
[pine apple pen apple,pineapple pen apple,pine applepen apple
]
解释: 注意你可以重复使用字典中的单词。示例 3
输入:
s catsandog
wordDict [cats, dog, sand, and, cat]
输出:
[]来源力扣LeetCode 链接https://leetcode-cn.com/problems/word-break-ii 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。
2. DP回溯
相关题目LeetCode 139. 单词拆分DP
先在139题的基础上判断单词是否可以拆分如果可以的话进行回溯暴力查找所有可能
class Solution {
public:vectorstring wordBreak(string s, vectorstring wordDict) {int i, j, n s.size();unordered_setstring set(wordDict.begin(), wordDict.end());bool dp[n1] {false};//dp[j]包含第j个字符为结尾的字符能否拆分dp[0] true;//空字符能拆分for(i 0; i n; i){if(dp[i] true)//左半边存在for(j i1; j n; j){if(set.count(s.substr(i,j-i)))dp[j] true;}}if(dp[n] true)//整个字符串可以拆{vectorstring ans;string str;int end 1;while(end n dp[end] ! 1)end;//找到下一个可拆点bt(s,set,dp,ans,str,0,end);return ans;}elsereturn {};//不能拆返回空}void bt(string s, unordered_setstring set, bool *dp, vectorstring ans,string str, int start, int end){if(start end)return;string temp s.substr(start,end-start);//[s,e]的字符bool inSet set.count(temp);//该字符在set集合中if(end s.size())//取到最后字符了{if(inSet)ans.push_back(strtemp);//将前缀和当前组合加入答案return;}int next end1;while(next s.size() dp[next] ! 1)next;//找下一个分割点bt(s,set,dp,ans,str,start,next);//不插入空格start不变end变下一个if(inSet)//字符在集合中才能加空格bt(s,set,dp,ans,strtemp ,end,next);//start变endend变next}
};
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/925290.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!