Given a string s, partition s such that every substring of the partition is a palindrome.
Return all possible palindrome partitioning of s.
Given s = "aab"
, return:
[
["aa","b"],
["a","a","b"]
]
class Solution { // 这道题其实和restorIP一样,是往下递归的问题,不需要用动态规划进行 palindrome 判断
private:
bool isPa(string &s)
{
int i =0;
int j = s.size()-1;
while (i < j)
{
if (s[i] != s[j])
return false;
i++;
j--;
}
return true;
}
void partitionHelper(string &s, int curIdx, vector<string> &curTry, vector<vector<string>> &retVtr)
{
if (curIdx == s.size())
{
if (curTry.size() != 0)
{
retVtr.push_back(curTry);
}
return;
}
int base = curIdx;
int maxLen = s.size()-curIdx;
for (int len=1; len<=maxLen; len++)
{
string oneString = s.substr(base, len);
if (isPa(oneString))
{
curTry.push_back(oneString);
partitionHelper(s, curIdx+len, curTry, retVtr);
curTry.pop_back();
}
}
}
public:
/**
* @param s: A string
* @return: A list of lists of string
*/
vector<vector<string>> partition(string s) {
// write your code here
vector<string> curTry;
vector<vector<string>> retVtr;
partitionHelper(s, 0, curTry, retVtr);
return retVtr;
}
};