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"] ]
思路:使用dfs+回溯。dfs搜索时候分两种情况,
1. 当tmpstr长度为1时,可以直接push到vec中,也可以和下一个字母拼起来再判断。
2. 当tmpstr长度大于1时,若tmpstr是回文,则push到vec中再进行dfs。不管是不是回文,都要与下一个字母拼起来再深度搜索。
参考代码:
class Solution {
public:
void dfs(vector<vector<string>>&ans, vector<string>&vec, string tmpstr, string s)
{
if(s.empty())
{
if(tmpstr.empty())
ans.push_back(vec);
return;
}
tmpstr += s.substr(0, 1);
if(tmpstr.length()==1)
{
vec.push_back(s.substr(0, 1));
dfs(ans, vec, "", s.substr(1));
vec.pop_back();
dfs(ans, vec, tmpstr, s.substr(1));
}
else
{
string str = tmpstr;
reverse(tmpstr.begin(), tmpstr.end());
if(str==tmpstr)
{
vec.push_back(tmpstr);
dfs(ans, vec, "", s.substr(1));
vec.pop_back();
}
dfs(ans, vec, str, s.substr(1));
}
}
vector<vector<string>> partition(string s) {
vector<vector<string>>ans;
if(s.empty())
return ans;
vector<string>vec;
dfs(ans, vec, "", s);
return ans;
}
};