题目:
Given a string s
, partition s
such that every substring of the partition is a palindrome. Return all possible palindrome partitioning of s
.
A palindrome string is a string that reads the same backward as forward.
Example 1:
Input: s = "aab" Output: [["a","a","b"],["aa","b"]]
Example 2:
Input: s = "a" Output: [["a"]]
Constraints:
1 <= s.length <= 16
s
contains only lowercase English letters.
思路:
这题只要在回溯的同时记得进行回文判断即可。如果string中[cur, i]组成的子串是回文,则进行下一轮递归。
代码:
class Solution {
public:
vector<vector<string>> partition(string s) {
backtracking(s, 0);
return res;
}
private:
vector<vector<string>> res;
vector<string> path;
void backtracking(string s, int cur) {
if (cur == s.size()) {
res.push_back(path);
return;
}
for (int i = cur; i < s.size(); i++) {
if (check(s, cur, i)) {
string tmp = s.substr(cur, i - cur + 1);
path.push_back(tmp);
backtracking(s, i + 1);
path.pop_back();
}
}
}
bool check(string s, int start, int end) {
for (int i = start, j = end; i < j; i++, j--) {
if (s[i] != s[j])
return false;
}
return true;
}
};