/*************************************************************************
> File Name: PalindromePartitioning.cpp
> Author: Shaojie Kang
> Mail: kangshaojie@ict.ac.cn
> Created Time: 2015年09月16日 星期三 16时46分38秒
> Problem:
Given a string s, partition s such that every substring of the partition is a palindrome.
Return all possible palindrome partitioning of s.
Have you met this question in a real interview? Yes
Example
given s = "aab",
Return
[
["aa","b"],
["a","a","b"]
]
************************************************************************/
#include<iostream>
#include<vector>
#include<string>
using namespace std;
class Solution
{
public:
bool isPalindrome(const string &str)
{
if(str.empty()) return true;
int size = str.size();
for(int i = 0, j = size-1; i < j; ++i, --j)
{
if(str[i] != str[j]) return false;
}
return true;
}
vector<vector<string> > partition(string s)
{
vector<vector<string> >result;
vector<string> oneResult;
partitionCore(s, 0, result, oneResult);
return result;
}
void partitionCore(string &s, int start, vector<vector<string> > &result, vector<string> oneResult)
{
int size = s.size();
if(start == size)
{
result.push_back(oneResult);
return;
}
for(int i = start; i < size; ++i)
{
string strTemp(s.substr(start, i-start+1));
if(isPalindrome(strTemp))
{
oneResult.push_back(strTemp);
partitionCore(s, i+1, result, oneResult);
oneResult.pop_back();
}
}
}
};
void print(const vector<vector<string> > &result)
{
for(int i = 0; i < result.size(); ++i)
{
for(int j = 0; j < result[i].size(); ++j)
{
cout<<result[i][j]<<" ";
}
cout<<endl;
}
}
int main()
{
string str("aab");
Solution sol;
vector<vector<string> > result = sol.partition(str);
print(result);
return 0;
}
「回溯法」Palindrome Partitioning
最新推荐文章于 2018-06-02 11:17:26 发布