Word Break II (leetcode)
2014-11-17 19:53
344 查看
题目:
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
题目来源:https://oj.leetcode.com/problems/word-break-ii/
解题思路:用f[i][j]表示s[i,j)在字典中,然后当遍历一遍字符串s后,从最后一列开始找f[i][s.size()]=1的值,即是可以分割的字符串。用深搜从i找到第0个字符,就能够得到一个被空格分隔的字符串。
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 =
"catsanddog",
dict =
["cat", "cats", "and", "sand", "dog"].
A solution is
["cats and dog", "cat sand dog"].
题目来源:https://oj.leetcode.com/problems/word-break-ii/
解题思路:用f[i][j]表示s[i,j)在字典中,然后当遍历一遍字符串s后,从最后一列开始找f[i][s.size()]=1的值,即是可以分割的字符串。用深搜从i找到第0个字符,就能够得到一个被空格分隔的字符串。
#include<iostream> #include<string> #include<vector> #include<unordered_set> using namespace std; void wordBreak(string s,int first,int last,unordered_set<string> &dict,vector<vector<bool> >&f,vector<string>&results,string &result) { if(last==0) { result.pop_back();//删除最后的空格 results.push_back(result); return ; } for(int i=first;i<=last;i++) { if(f[i][last]==true) { string temp=result; result.insert(result.begin(),1,' '); result.insert(result.begin(),s.begin()+i,s.begin()+last); wordBreak(s,0,i,dict,f,results,result); result=temp; } } } vector<string> wordBreak(string s, unordered_set<string> &dict) { vector<vector<bool> >f(s.size()+1,vector<bool>(s.size()+1,false)); vector<bool> v(s.size()+1,false); v[0]=true; f[0][0]=true; for(int i=1;i<=s.size();i++) { for(int j=i-1;j>=0;j--) { if(v[j] && dict.find(s.substr(j,i-j))!=dict.end()) { v[i]=true; f[j][i]=true; } } } vector<string>results; string result; wordBreak(s,0,s.size(),dict,f,results,result); return results; } int main() { string A[]={"cat", "cats", "and", "sand", "dog"}; unordered_set<string> dict(A,A+5); string s="catsanddog"; vector<string> result=wordBreak(s,dict); system("pause"); return 0; }
相关文章推荐
- Leetcode140:Word Break II
- leetcode — word-break-ii
- leetcode 140. Word Break II
- LeetCode之“动态规划”:Word Break && Word Break II
- LeetCode Word Break II
- leetcode day7 -- Word Break I II
- [LeetCode]Word BreakII
- LeetCode——Word Break II
- LeetCode Word Break II
- [LeetCode] Word Break II
- LeetCode: Word Break II 解题报告
- leetcode[140]Word Break II
- Leetcode -- Word Break II
- Leetcode: Word Break II
- Leetcode 140. Word Break II
- [leetcode]Word Break II
- LeetCode(140) Word Break II
- Leetcode dfs Word Break II
- LeetCode ||& Word Break && Word Break II(转)——动态规划
- [LeetCode] Word Break II