给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: "aab" 输出: [ ["aa","b"], ["a","a","b"] ]
C++
class Solution {
public:
bool judge(string s, int left, int right)
{
while(left<right)
{
if(s[left]!=s[right])
{
return false;
}
left++;
right--;
}
return true;
}
void DFS(string s, int start, vector<string>& tmp, vector<vector<string>>& res)
{
if(start==s.length())
{
res.push_back(tmp);
return;
}
for(int i=start;i<s.length();i++)
{
if(judge(s,start,i))
{
tmp.push_back(s.substr(start,i-start+1));
DFS(s,i+1,tmp,res);
tmp.pop_back();
}
}
}
vector<vector<string>> partition(string s)
{
int n=s.length();
vector<vector<string>> res;
vector<string> tmp;
DFS(s,0,tmp,res);
return res;
}
};