word-break-ii
来源:互联网 发布:刘也行扒皮 知乎 编辑:程序博客网 时间:2024/05/09 07:42
题目描述
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"].
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"].
IDEA
1.判断字符串能够按照字典分割 isBreak()
2.组合可能分割的所有结果,递归:从字符串的最后一个字符开始向前遍历,将字符串分为两部分,后一部分是一个存在字典中的单词,并且前一个子串也能分割,则递归,然后将后一个子串连接到所有的结果中
CODE
class Solution {vector<bool> dp;public: vector<string> wordBreak(string s, unordered_set<string> &dict) { vector<string> res; if(isBreak(s,dict)==false) return res; res=find_string(s,dict); return res; } bool isBreak(string s, unordered_set<string> &dict) { int len=s.length(); dp.resize(len+1); dp[0]=true; for(int i=1;i<=len;i++){ for(int j=i-1;j>=0;j--){ if(dict.find(s.substr(j,i-j))!=dict.end()&&dp[j]){ dp[i]=true; } } } return dp[len]; } vector<string> find_string(string s,unordered_set<string> &dict){ int len=s.length(); vector<string> res,tmp; for(int i=len-1;i>=0;i--){ if(dict.find(s.substr(i,len-i))!=dict.end()&&dp[i]){ if(i==0){ res.push_back(s); }else{ tmp=find_string(s.substr(0,i),dict); for(int j=0;j<tmp.size();j++){ res.push_back(tmp[j]+" "+s.substr(i,len-i)); } } } } return res; } };
0 0
- Word Break && Word Break II
- Word Break && Word Break II
- [leetcode]Word Break II
- Word Break II
- Word Break II
- LeetCode:Word Break II
- Word Break II
- Leetcode: Word Break II
- [LeetCode] Word Break II
- [LeetCode]Word Break II
- LeetCode | Word Break II
- Word Break II
- Word Break II
- [LeetCode] - Word Break II
- LeetCode - Word Break II
- Leetcode Word Break II
- Word Break II
- Word Break II
- 线程安全浅谈
- Java实现二值化处理图像
- android资源使用方法
- Gulp自动构建Web前端程序
- Java绝对/相对路径获取与getResourceAsStream()方法
- word-break-ii
- if语句,逻辑运算符&&和||和!,cctype字符库,?:,switch,continue和break,清除非法字符cin.clear(),文件的输入输出
- ECharts图表JAVAWeb
- Android中自定义AlertDialog,去除黑,白边框
- getWidth和getMeasuredWidth
- css使图片水平垂直居中
- HTML标签元素的分类
- BZOJ 2154: Crash的数字表格
- 2014-05-06:发布OrangeUI For FMX and VCL1.0 Preview 3版