Leetcode--Word Break II
2014-10-06 11:19
573 查看
Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each word is a valid dictionary word.
Return all such possible sentences.
For example, given
s =
dict =
A solution is
思路:类似于求解NP问题的回溯法,res[i][j]=true表示字符串的i到j位在字典中
下面参考一段代码来自:https://oj.leetcode.com/discuss/133/is-there-better-solution-for-this-word-breakii
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"]
思路:类似于求解NP问题的回溯法,res[i][j]=true表示字符串的i到j位在字典中
class Solution { public: int len; bool **res; string ss; vector<string> v; void traceback(int n,string str) { if(n>=len) { v.push_back(str); return ; } else{ for(int i=n;i<len;i++) { if(res [i]) { string st=str+ss.substr(n,i-n+1); traceback(i+1,st); } } } } vector<string> wordBreak(string s, unordered_set<string> &dict) { ss=s; len=s.size(); res=new bool*[len]; for(int i=0;i<s.size();i++){ res[i]=new bool[len]; for(int j=0;j<len;j++) res[i][j]=false; } for(int i=0;i<s.size();i++) { for(int j=i;j<s.size();j++) { if(dict.count(s.substr(i,j-i+1))>0) { res[i][j]=true; } } } string str=""; traceback(0,str); return v; } };
Submission Result: Time Limit Exceeded
下面参考一段代码来自:https://oj.leetcode.com/discuss/133/is-there-better-solution-for-this-word-breakiiclass Solution { public: void collect(vector<list<int>>& mark, int ind, const string& s, string path, vector<string>& result){ for(auto&stop: mark[ind]){ string sub=s.substr(ind,stop-ind); string newpath=path+(ind==0?sub:" "+sub); if(stop==s.length()) result.push_back(newpath); else collect(mark,stop,s,newpath,result); } } vector<string> wordBreak(string s, unordered_set<string> &dict) { vector<list<int>> mark(s.length(),list<int>()); for(int stop=s.length();stop>=0;stop--){ if(stop<s.length()&&mark[stop].empty())continue; for(int start=stop-1;start>=0;start--) if(dict.count(s.substr(start,stop-start))) mark[start].push_back(stop); } vector<string> result; collect(mark,0,s,"",result); return result; } };
void collect(vector<list<int>>& mark, int ind, const string& s, string path, vector<string>& result) { for(list<int>::iterator it=mark[ind].begin();it!=mark[ind].end();it++) { string sub=s.substr(ind,*it-ind); string newpath=path+(ind==0?sub:" "+sub); if(*it==s.length()) result.push_back(newpath); else collect(mark,*it,s,newpath,result); } }
相关文章推荐
- leetcode:Word Break II
- [Leetcode]Word Break & Word Break II
- LeetCode 140. Word Break II
- LeetCode 140. Word Break II
- LeetCode Word Break II
- LeetCode:Word Break II
- LeetCode | Word Break II
- 123_leetcode_Word Break II
- LeetCode Word Break II
- leetcode Word Break II
- [leetcode 140] Word Break II
- Leetcode 140. Word Break II
- LeetCode: Word Break I && II
- leetcode Word Break II
- Word Break II -- leetcode
- leetcode之Word Break II
- 【LeetCode】Word Break II 动态规划
- [LeetCode] Word Break II
- [LeetCode] Word Break II (TLE)
- leetcode 140. Word Break II