class Solution {int n;vector<string>res;unordered_map<int,set<int>>hash;string s;void dfs(int start, string temp){if(start == n){res.push_back(temp);return ;}for(auto end : hash[start]){if(start == 0){//前面不要有空格dfs(end, s.substr(start, end - start));}else{dfs(end, temp +" " + s.substr(start, end - start));}}}
public:vector<string> wordBreak(string s, vector<string>& wordDict) {this->n = s.size();this->s = s;unordered_set<string>m_set(wordDict.begin(), wordDict.end());vector<bool>dp(s.size() + 1, false);dp[s.size()] = true;for(int i = s.size(); i >= 1; i--){if(dp[i] == true){for(int j = 0; j < i; j++){if(m_set.count(s.substr(j, i - j)) == 1){hash[j].insert(i);dp[j] = true;}}}}dfs(0, "");return res;}
};
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态