方法:回溯
解空间
class Solution {
public:
vector<vector<string>> partition(string s) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
ret.clear();
vector<string> ans;
partition(s, 0, ans);
return ret;
}
void partition(string &s, int begin, vector<string> &ans){
if(begin == s.size())
{
ret.push_back(ans);
return;
}
for(int i = begin; i < s.size(); ++i)
{
if(isPalindrome(s, begin, i))
{
ans.push_back(s.substr(begin, i-begin+1));
partition(s, i+1, ans);
ans.pop_back();
}
}
}
bool isPalindrome(string s, int i, int j)
{
while(i < j)
{
if(s[i] != s[j]) return false;
++i, --j;
}
return true;
}
private:
vector<vector<string>> ret;
};