此题与93. 复原IP地址/C++有些类似。
class Solution {
vector<vector<string>> res;
vector<string> vec;
//判断是否回文
bool isPalindrome(string s){
int i=0,j=s.size()-1;
while(i<j)
{
if(s[i]!=s[j])
return false;
++i;
--j;
}
return true;
}
//index表示选取s字符串的起点
void generate(string s, int index){
//如果处理到字符串结尾,则保存结果
if(index==s.size()){
res.push_back(vec);
return;
}
else{
//可以选择接下来的1至s.size()-index位
for(int i=1;i<=s.size()-index;++i){
if(isPalindrome(s.substr(index,i))){
vec.push_back(s.substr(index,i));
//下一次选择的起点为index+i
generate(s,index+i);
//回溯
vec.pop_back();
}
}
}
return;
}
public:
vector<vector<string>> partition(string s) {
generate(s,0);
return res;
}
};