Given a string s, partition s such that every substring of the partition is a palindrome.
Return all possible palindrome partitioning of s.
For example, given s = “aab”,
Return
[
[“aa”,”b”],
[“a”,”a”,”b”]
]
思路:此题第一思路就是回溯,然后就是回溯算法的固定思路解此类问题了。
bool isSubPailndrome(string& str, int low, int high){
if (low == high)return true;
while (low <= high){
if (str[low] == str[high])low++, high--;
else return false;
}
return true;
}
void dfs_partition(string& s, int start, int end, vector<string>& path, vector<vector<string>>& res){
if (end == s.size()){
if (isSubPailndrome(s, start,end - 1)){
path.push_back(s.substr(start, end - start));
res.push_back(path);
path.pop_back();
}
return;
}
if (isSubPailndrome(s,start,end - 1)){
path.push_back(s.substr(start, end - start));
dfs_partition(s, end, end + 1, path, res);
path.pop_back();
}
dfs_partition(s, start, end + 1, path, res);
}
vector<vector<string>> partition(string s) {
vector<vector<string>> res;
if (s == "")return res;
vector<string> path;
dfs_partition(s, 0, 1, path, res);
return res;
}