题目:
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"] ]翻译:
将一个字符串进行分割,使得其所有的子字符串均为回文字符串,返回其所有的分割结果。
分析:
本题用递归即可,不过这个递归稍微有些复杂。还需要写一个判断字符串是否为回文字符串的函数。每次都将一个字符放到字符串temp里,判断temp是否为回文字符,如果该字符串是回文字符串,那么将该字符串放到result里,并且进行下一次递归。当位置i>=s.size()时,将result的结果加入到results里。有一个需要额外注意的地方,在每次递归结束之后,需要将result进行还原,具体可以结合代码进行理解。
代码:
class Solution {
public:
vector<vector<string>> partition(string s) {
vector<vector<string>> results;
vector<string> result;
if(s.size()==0)
return results;
palindrome_search(results,result,s,0);
return results;
}
void palindrome_search(vector<vector<string>>& results,vector<string>& result,string &s,int i)
{
if (!(i<s.size()))
{
results.push_back(result);
return;
}
string temp;
while (i<s.size())
{
temp.push_back(s[i]);
i++;
if (palindrome_judge(temp))
{
result.push_back(temp);
palindrome_search(results,result,s,i);
result.pop_back();//还原上一次的结果
}
}
}
bool palindrome_judge(string str)
{
string temp=str;
reverse(temp.begin(), temp.end());
return str==temp;
}
};
结果: