Given a string s, partition s such that every substring of the partition is a palindrome.
Return all possible palindrome partitioning of s.
For example, given s = "aab"
,
Return
[ ["aa","b"], ["a","a","b"] ]
题目:
基本思想是递归的。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
bool isPalindrome(string s)
{
int len = s.size();
int i;
for(i=0;i<len/2;i++)
{
if(s[i]!=s[len-i-1])
{
break;
}
}
if(i == len/2)
return true;
else
return false;
}
vector<vector<string>> partition(string s) {
vector<vector<string>> palindromeList;
int len = s.size();
if(len == 0)
return palindromeList;
int index = 1;
while(index <= len)
{
if(isPalindrome(s.substr(0,index)))
{
vector<vector<string>> temp = partition(s.substr(index,len-(index)));
if(temp.size() == 0)
{
vector<string> subTemp;
subTemp.push_back(s.substr(0,index));
palindromeList.push_back(subTemp);
}
for(int i=0;i<temp.size();i++)
{
vector<string> subTemp = temp.at(i);
subTemp.insert(subTemp.begin(),s.substr(0,index));
palindromeList.push_back(subTemp);
}
}
index++;
}
return palindromeList;
}
void printRes(vector<vector<string>> palindromeList)
{
int len = palindromeList.size();
for(int i=0;i<len;i++)
{
vector<string> temp = palindromeList.at(i);
for(int j=0;j<temp.size();j++)
{
cout << temp.at(j) << " ";
}
cout << endl;
}
}
int main(void)
{
string s = "abab";
vector<vector<string>> palindromeList = partition(s);
printRes(palindromeList);
system("pause");
return 0;
}