leetcode - Word Break II
2013-10-13 16:44 张汉生 阅读(559) 评论(0) 收藏 举报题目描述:点击此处
class Solution {
public:
vector<vector<string>> rlts;
int * flag;
bool wordBreak(string &s, int index, unordered_set<string> &dict){
if (flag[index]==-1)
return false;
if (!rlts[index].empty())
return true;
int len = s.length()-index;
if (len==0){
return true;
}
string header;
bool ans = false;
for (int i=index; i<s.length(); i++){
header = header+s.at(i);
if (dict.find(header)!=dict.end())
if (wordBreak(s, i+1, dict)){
ans = true;
if (i==s.length()-1)
rlts[index].push_back(header);
else {
int sz = rlts[i+1].size();
for (int j =0; j<sz; j++)
rlts[index].push_back(header +" "+ rlts[i+1][j]);
}
}
}
if (ans == false)
flag[index] = -1;
return ans;
}
vector<string> wordBreak(string s, unordered_set<string> &dict) {
// Note: The Solution object is instantiated only once and is reused by each test case.
rlts.clear();
flag = new int[s.length()+1];
for (int i=0; i<s.length()+1; i++){
rlts.push_back(vector<string>());
flag[i] = 0;
}
wordBreak(s, 0,dict);
return rlts[0];
}
};
浙公网安备 33010602011771号