leetcode Word Break II
来源:互联网 发布:数据大师埋雷 编辑:程序博客网 时间:2024/06/05 16:28
int length;
vector<string> one_result;
vector<string> result;
vector<vector<bool> > is_word;
void backTrack(string &s, int last, int index, vector<string> &one_result)
{
if(last == length)
{
string str;
for(int i = 0; i < one_result.size(); ++i)
{
str.append(one_result[i]);
if(i != one_result.size() - 1)
str.append(" ");
}
result.push_back(str);
return;
}
for(int i = last; i < length; ++i)
{
if(is_word[last][i])
{
one_result.push_back(s.substr(index, i - index + 1));
backTrack(s, i+1, i+1, one_result);
one_result.pop_back();
}
}
}
vector<string> wordBreak(string s, unordered_set<string>& wordDict)//unordered_set
{
if(s.empty() || wordDict.empty())
return result;
length= s.size();
is_word.assign(length, vector<bool>(length, false));
for(int i = 0; i < length; ++i)
{
for(int j = i; j < length; ++j)
{
if(wordDict.count(s.substr(i, j - i + 1)) > 0)
is_word[i][j] = true;
}
}
//第一个字母开头就不能划分
int index = 0;
for(index = 0; index < length; ++index)
{
if(is_word[0][index])
break;
}
if(index == length)
return result;
//最后一个单词不能划分
index = 0;
for(index = 0; index < length; ++index)
{
if(is_word[index][length-1])
break;
}
if(index == length)
return result;
backTrack(s, 0, 0, one_result);
return result;
}
vector<string> one_result;
vector<string> result;
vector<vector<bool> > is_word;
void backTrack(string &s, int last, int index, vector<string> &one_result)
{
if(last == length)
{
string str;
for(int i = 0; i < one_result.size(); ++i)
{
str.append(one_result[i]);
if(i != one_result.size() - 1)
str.append(" ");
}
result.push_back(str);
return;
}
for(int i = last; i < length; ++i)
{
if(is_word[last][i])
{
one_result.push_back(s.substr(index, i - index + 1));
backTrack(s, i+1, i+1, one_result);
one_result.pop_back();
}
}
}
vector<string> wordBreak(string s, unordered_set<string>& wordDict)//unordered_set
{
if(s.empty() || wordDict.empty())
return result;
length= s.size();
is_word.assign(length, vector<bool>(length, false));
for(int i = 0; i < length; ++i)
{
for(int j = i; j < length; ++j)
{
if(wordDict.count(s.substr(i, j - i + 1)) > 0)
is_word[i][j] = true;
}
}
//第一个字母开头就不能划分
int index = 0;
for(index = 0; index < length; ++index)
{
if(is_word[0][index])
break;
}
if(index == length)
return result;
//最后一个单词不能划分
index = 0;
for(index = 0; index < length; ++index)
{
if(is_word[index][length-1])
break;
}
if(index == length)
return result;
backTrack(s, 0, 0, one_result);
return result;
}
0 0
- [leetcode]Word Break II
- LeetCode:Word Break II
- Leetcode: Word Break II
- [LeetCode] Word Break II
- [LeetCode]Word Break II
- LeetCode | Word Break II
- [LeetCode] - Word Break II
- LeetCode - Word Break II
- Leetcode Word Break 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
- Word Break II leetcode
- [leetcode]Word Break II
- leetcode -- word break II
- bfs 模版
- android用户登录对话框代码
- 人脸特征点定位与检测
- C#操作XML
- poj1323Game Prediction
- leetcode Word Break II
- 位基本运算
- nyoj 题目97 兄弟郊游问题
- 加密隧道绕过WAF
- 反射注解的程序举例
- 信庭嵌入式工作室-互联网+的交流
- DirectShow自带的实例(打开摄像头)
- Android屏幕适配经验谈
- 基于面部特征识别的疲劳检测系统设计实现