class Solution {
public:
vector<string> path;
vector<vector<string>> result;
vector<vector<string>> partition(string s) {
solve(s, 0);
return result;
}
// 检查是否为回文串
bool isPalindrome(const string& s){
int begin = 0, end = s.length() - 1;
while(begin < end){
if(s[begin] != s[end])
return false;
++begin;
--end;
}
return true;
}
// 递归解决
void solve(const string &s,int pos){
if(pos == s.length()){
result.push_back(path);
return;
}
for(int i = pos; i < s.length(); ++i){
string prefix = s.substr(pos, i - pos + 1);//以s[pos]字符开头的所有前缀
if(!isPalindrome(prefix)) //不是回文串就继续找
continue;
path.push_back(prefix); //加入path
solve(s, i + 1); //从已经找到的回文串的下一个字符继续找
path.pop_back(); //记得移除,path还要继续复用
}
}
};
static int x=[](){
std::ios::sync_with_stdio(false);
cin.tie(NULL);
return 0;
}();