题目描述:
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"] ]
使用回溯法,AC代码如下:
class Solution {
public:
bool isOK(string s)
{
int n = s.size();
for (int i = 0, j = n - 1; i < j; ++i, --j){
if (s[i] != s[j])
return false;
}
return true;
}
vector<vector<string>> partition(string s)
{
vector<vector<string>> ans;
int n = s.size();
if (n == 0) return ans;
vector<int> lens(n, 0);
int curPos = 0;
int index = 0;
while (index >= 0){
++lens[index];
while (curPos + lens[index] <= n && !isOK(s.substr(curPos, lens[index]))){
++lens[index];
}
if (curPos + lens[index] > n){
lens[index] = 0;
--index;
if (index >= 0)
curPos -= lens[index];
}
else{
curPos += lens[index];
if (curPos == n){
int tmpCurPos = 0;
vector<string> tmpAns;
for (int i = 0; i <= index; ++i){
if (lens[i] > 0){
tmpAns.push_back(s.substr(tmpCurPos, lens[i]));
tmpCurPos += lens[i];
}
}
ans.push_back(tmpAns);
curPos -= lens[index];
}
else{
++index;
lens[index] = 0;
}
}
}
return ans;
}
};