#include<string>
#include<vector>
#include<iostream>
using namespace std;
class Solution
{
private:
vector<vector<string> > result;
vector<string> path;
void backtracking(const string& s,int startIndex)
{
if(startIndex>=s.size())
{
result.push_back(path);
return;
}
for(int i=startIndex;i<s.size();i++)
{
if(isPalindrome(s,startIndex,i))
{
string str=s.substr(startIndex,i-startIndex+1);
path.push_back(str);
}
else
{
continue;
}
backtracking(s,i+1);
path.pop_back();
}
}
bool isPalindrome(const 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;
}
public:
vector<vector<string>> partition(string s)
{
result.clear();
path.clear();
backtracking(s,0);
return result;
}
};
int main()
{
string s;
cout<<"请输入s:"<<endl;
cin>>s;
Solution mySolution;
vector<vector<string>> result=mySolution.partition(s);
for(int i=0;i<result.size();i++)
{
for(int j=0;j<result[i].size();j++)
{
for(int k=0;k<result[i][j][k];k++)
{
cout<<result[i][j][k];
}
cout<<",";
}
cout<<endl;
}
return 0;
}
【回溯算法】131.分割回文串(C++)完整使用
最新推荐文章于 2024-07-24 11:32:27 发布