先来个简单但低效的递归代码,TLE:
vector<string> wordBreak(string s, unordered_set<string> &dict) {
vector<string> res;
if (dict.count(s)>0)
{
res.push_back(s);
}
string tmp = "";
int i,j;
vector<string> suffixes;
for (i = 1; i < s.length(); i++){
tmp = s.substr(0, i);
if (dict.count(tmp) > 0)
{
suffixes = wordBreak(s.substr(i), dict);
if (suffixes.size() != 0)
{
for (j = 0; j < suffixes.size(); j++)
{
res.push_back(tmp + " " + suffixes[j]);
}
}
}
}
return res;
}
遇到这么个例子挂了:
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab", ["a","aa","aaa","aaaa","aaaaa","aaaaaa","aaaaaaa","aaaaaaaa","aaaaaaaaa","aaaaaaaaaa"]
简直懒死了,直接改倒序递归AC了。。。。 还好没有倒过来的测试数据,又钻空子了
class Solution {
public:
vector<string> wordBreak(string s, unordered_set<string> &dict) {
vector<string> res;
if (dict.count(s)>0)
{
res.push_back(s);
}
string tmp = "";
int i,j;
vector<string> suffixes;
for (i = s.length() - 1; i >= 0; i--){
tmp = s.substr(i);
if (dict.count(tmp) > 0)
{
suffixes = wordBreak(s.substr(0,i), dict);
if (suffixes.size() != 0)
{
for (j = 0; j < suffixes.size(); j++)
{
res.push_back(suffixes[j] + " " + tmp);
}
}
}
}
return res;
}
};