给定一个字符串 s
,将 s
分割成一些子串,使每个子串都是回文串。
返回 s
所有可能的分割方案。
示例:
输入: "aab"
输出:
[
["aa","b"],
["a","a","b"]
]
解答
递归+回溯
class Solution {
public:
vector<vector<string>> partition(string s) {
vector<vector<string>> result;
if(s.empty())
return result;
vector<string> temp;
helper(s, result, temp, 0, s.size() - 1);
return result;
}
void helper(string& s, vector<vector<string>>& result, vector<string>& temp, int start, int end){
if(start > end){
result.emplace_back(temp);
return;
}
for(int len = 1; len <= (end - start + 1); len++){
if(check(s, start, start + len - 1)){
temp.emplace_back(s.substr(start, len));
helper(s, result, temp, start + len, end);
temp.pop_back();
}
}
}
bool check(string& s, int start, int end){
while(start < end){
if(s[start] != s[end])
return false;
start++;
end--;
}
return true;
}
};