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进行还原,具体可以结合代码进行理解。
ac代码:
class Solution { public: vector<vector<string>> partition(string s) { vector<vector<string>>results; vector<string>result; int i,L=s.size(); if(L==0) return results; ps(results,result,s,L,0); return results; } void ps(vector<vector<string>>&results,vector<string>&result,string s,int L,int index) { // int i; string str; if(index>=L) { results.push_back(result); return; } while(index<L) { str+=s[index]; index++; if(judge(str)) { result.push_back(str); ps(results,result,s,L,index); result.pop_back(); } } } bool judge(string s) { int i,L=s.length(); for(i=0;i<L/2;i++) { if(s[i]!=s[L-i-1]) return false; } return true; } };