暴力搜索,超时
动态规划,时间复杂度O(n^2)
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
int n= s.size();
vector<bool> dp(n+1,false);
unordered_set<string> wordSet;
for(auto word:wordDict) wordSet.insert(word);
dp[0] = true;
for(int i=1;i<=n;i++){
for(int j=0;j<i;j++){
if(dp[j]&&wordSet.count(s.substr(j,i-j))) dp[i] = true;
}
}
return dp[n];
}
};
输出方案数
傻搜,超时
class Solution {
public:
vector<string> res;
string tmp;
vector<string> wordBreak(string s, vector<string>& wordDict) {
dfs(s,wordDict,0);
return res;
}
void dfs(string s, vector<string>& wordDict, int start){
if(start>=s.size()) {
tmp.pop_back();
res.push_back(tmp);
return;
}
for(int i=0;i<wordDict.size();i++){
int m = wordDict[i].size();
if(start+m<=s.size()&&s.substr(start,m)==wordDict[i]){
tmp+= (s.substr(start,m)+" ");
dfs(s,wordDict,start+m);
tmp.pop_back();
while(!tmp.empty()&&tmp[tmp.size()-1]!=' ') tmp.pop_back();
}
}
}
};