这道题直接递归会超时,需要先判断这条语句能不能切割再去递归,不会超时。
class Solution {
public:
vector<string> wordBreak(string s, unordered_set<string> &dict) {
vector<string> ss;
string result;
int len=s.length();
if(len<1)
return ss;
vector<bool> v(s.length()+1,false);
v[0]=true;
for(int i=0;i<len;i++)
for(int j=i;v[i]&&j<len;j++){
if(dict.find(s.substr(i,j-i+1))!=dict.end())
v[j+1]=true;
}
if(!v[len])
return ss;
dp(ss,s,dict,0,v,result);
return ss;
}
void dp(vector<string> &ss,string s,unordered_set<string> &dict,int i,vector<bool> v,string result){
if(i>=s.length()){
ss.push_back(result);
return;
}
for(int j=i;j<s.length();j++){
string tem=result;
if(dict.find(s.substr(i,j-i+1))!=dict.end()){
if(j==s.length()-1)
tem=tem+s.substr(i,j-i+1);
else
tem=tem+s.substr(i,j-i+1)+' ';
dp(ss,s,dict,j+1,v,tem);
}
}
}
};