一:题目
二:思路
1.分析题意:这里是给定我们一个字符串 我们输出的结果是 切割不同的位置 来得到不同的字符串
然后这些字符串是要是回文字符串 所以我们需要一个函数去判断我们输入的字符串是否是回文
字符串(这里用双指针法来判断是否为回文字符串)
2.递归回溯来解决
vector<vector >ans;
vector path;
1>:确定递归函数的参数
void backstacking(string &str,int index)
2>:确定回溯终止条件
//当我们的切割线是在字符串的末尾的时候,这时候就已经得到一种结果
if(index >= str.size()){
ans.push_back(path);
return ;
}
3>:单层逻辑
for(int i = index; i < s.size(); i++) {
//首先判断是否是回文串
if(IsPalindromeString(s,index,i)){
string str = s.substr(index,i-index+1);//第一个参数是起始位置
//第二个参数是截取的几个字符
path.push_back(str);
}else {
continue;
}
backstacking(str,i+1);
path.pop_back();
}
//判断回文字符串
bool IsPalindromeString(string &s,int start,int end) {
for(int i = start,j = end; i < j; i++,j–) {
if(s[i] != s[j]) {
return false;
}
}
return true;
}
三:上码
class Solution {
public:
/**
思路:
1.分析题意:这里是给定我们一个字符串 我们输出的结果是 切割不同的位置 来得到不同的字符串
然后这些字符串是要是回文字符串 所以我们需要一个函数去判断我们输入的字符串是否是回文
字符串(这里用双指针法来判断是否为回文字符串)
2.递归回溯来解决
vector<vector<int> >ans;
vector<string> path;
1>:确定递归函数的参数
void backstacking(string &str,int index)
2>:确定回溯终止条件
//当我们的切割线是在字符串的末尾的时候,这时候就已经得到一种结果
if(index >= str.size()){
ans.push_back(path);
return ;
}
3>:单层逻辑
for(int i = index; i < s.size(); i++) {
//首先判断是否是回文串
if(IsPalindromeString(s,index,i)){
string str = s.substr(index,i-index+1);//第一个参数是起始位置
//第二个参数是截取的几个字符
path.push_back(str);
}else {
continue;
}
backstacking(str,i+1);
path.pop_back();
}
//判断回文字符串
bool IsPalindromeString(string &s,int start,int end) {
for(int i = start,j = end; i < j; i++,j--) {
if(s[i] != s[j]) {
return false;
}
}
return true;
}
*/
vector<vector<string> >ans;
vector<string> path;
void backstacking(string &s,int index) {
if(index >= s.size()){
ans.push_back(path);
return ;
}
for(int i = index; i < s.size(); i++) {
//首先判断是否是回文串
if(IsPalindromeString(s,index,i)){
string str = s.substr(index,i-index+1);//第一个参数是起始位置
//第二个参数是截取的几个字符
path.push_back(str);
}else {
continue;
}
backstacking(s,i+1);
path.pop_back();
}
}
bool IsPalindromeString(string &s,int start,int end) {
for(int i = start,j = end; i < j; i++,j--) {
if(s[i] != s[j]) {
return false;
}
}
return true;
}
vector<vector<string>> partition(string s) {
// string str = "abcdef";
// string ss = str.substr(1,4);
// cout << ss;
// return {};
backstacking(s,0);
return ans;
}
};