题目描述
给定一个字符串s,分割s使得s的每一个子串都是回文串
返回所有的回文分割结果
例如:给定字符串s="aab",
返回
[↵ ["aa","b"],↵ ["a","a","b"]↵ ]
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"]↵ ]↵
解题思路
class Solution {
public:
vector<vector<string>> partition(string s) {
vector<vector<string>> res;
vector<string> cur;
dfs(s, cur, res);
return res;
}
bool isPalindrome(string s){
return s == string(s.rbegin(), s.rend()); //rbegin()指向容器尾元素,rend()指向容器首元素前一个位置
}
void dfs(string s, vector<string> & cur, vector<vector<string>> &res){
if( s == ""){
res.push_back(cur);
return;
}
for(int i = 1; i <= s.length(); i++){
string sub = s.substr(0, i); // substr(start, length)
if(isPalindrome( sub )){
cur.push_back(sub); //当前子串为回文串,可加入cur
dfs(s.substr(i, s.length() - i), cur, res);
cur.pop_back(); //当前子串的结果已经得到,退出当前子串
}
}
}
};