给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: “aab”
输出:
[
["aa","b"],
["a","a","b"]
]
class Solution {
bool isPalindStr(string s) //判断是否是回文串
{
if(s.length() == 1) return true;
int len = s.length();
for(int i = 0; i < len/2; i++)
{
if(s[i] != s[len-i-1])
{
return false;
}
}
return true;
}
void dfs(vector<vector<string>> &vecRes, vector<string> &vecTmp, string s, int left)
{
if(left >= s.length())
{
if(!vecTmp.empty()) //不需要判断也可以
{
vecRes.push_back(vecTmp);
}
return;
}
for(int right = left; right < s.length(); right++)
{
string strTmp = s.substr(left, right-left+1);
if(isPalindStr(strTmp))
{
vecTmp.push_back(strTmp);
dfs(vecRes, vecTmp, s, right+1);
vecTmp.pop_back();
}
}
}
public:
vector<vector<string>> partition(string s) {
vector<vector<string>> vecRes;
vector<string> vecTmp;
dfs(vecRes, vecTmp, s, 0);
return vecRes;
}
};