- 思路
使用的是回溯的思想,思路比较简单。注意从string中删除字符的方法。trans函数可以对第一个参数进行优化,可以传递两个整数来标志当前可以选择的路径。
- 代码
class Solution {
public:
vector<string> ans;
vector<string> wordBreak(string s, vector<string>& wordDict) {
map<string, bool> map;
for(string s : wordDict) map[s] = true;
string temp;
trans(s, temp, map);
return ans;
}
void trans(const string s, string having, map<string, bool>& map){
if(s.length() == 0){
ans.push_back(having);
return;
}
if(having != "") having += " ";
int len = s.length();
for(int i = 0; i < len; i++){
string temp = s.substr(0, i + 1);
if(map[temp]){
having += temp;
trans(s.substr(i + 1, len - i - 1), having, map);
having.erase(having.size() - temp.size(), temp.size());
}
}
}
};