问题描述
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>> result;
if (s.length() == 0)
return result;
vector<string> vec;
helper(0,s,vec,result);
return result;
}
void helper(int index, string& s, vector<string>& vec, vector<vector<string>>& result) {
if (index == s.length()) {
result.push_back(vec);
return;
}
for (int i = index; i < s.length(); ++i) {
if (isPalindrome(s,index,i)) {
vec.push_back(s.substr(index,i-index+1));
helper(i+1,s,vec,result);
vec.pop_back();
}
}
}
bool isPalindrome(const string& s, int start, int end) {
while(start <= end) {
if(s[start++] != s[end--])
return false;
}
return true;
}
};