一、题目
二、代码
class Solution
{
//切割+判断 切割的过程中判断,然后压入path 那这里的切割就不是真的切割 是模拟的切割
//string substr(int pos = 0, int n = npos) const; //返回由pos 开始的 n个字符组成的字符串
public:
vector<vector<string>> return_vector;
vector<string> path;
//start_point 用于判断是否到了字符串的末尾
//s是原字符串用于切割
void track_back(int start_point,string s)
{
int i,j;
string temp_string;
if(start_point==s.size()) //回文结果为1才进入这一层 所以进到这里必定是已经产生结果了
{
return_vector.push_back(path);
return;
}
for(i=start_point;i<s.size();i++)
{
temp_string=s.substr(start_point,i-start_point+1);
for(j=0;j<temp_string.size();j++) std::cout<<" "<<temp_string[j];
std::cout<<std::endl;
if(isparting(temp_string)) //这是这一题的不同之处 结果为1往下进行 否则contine
{
path.push_back(temp_string);
track_back(i+1,s);
path.pop_back();
}
else
{
continue;
}
}
}
bool isparting(string judge_string)
{
int i,j;
int result=1;
if(judge_string.size()!=0)
{
for(i=0,j=judge_string.size()-1;i<j;i++,j--)
{
if(judge_string[i]!=judge_string[j])
{
result=0;
break;
}
}
}
else
{
result=0;
}
// if(result==0) std::cout<<"不是回文 "<<std::endl;
// if(result==1)
// {
// std::cout<<"是回文 "<<std::endl;
// for(i=0;i<judge_string.size();i++) std::cout<<" "<<judge_string[i];
// std::cout<<std::endl;
// }
return result;
}
vector<vector<string>> partition(string s)
{
return_vector.clear();
path.clear();
// for(int i=0;i<s.size();i++) std::cout<<" "<<s[i];
// std::cout<<std::endl;
track_back(0,s);
// isparting("");
return return_vector;
}
};