131. 分割回文串
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
解题思路: 回溯暴力解法。
class Solution {
public:
bool isPalindrome(string a) {
int left = 0, right = a.size() - 1;
while (left < right) {
if (a[left++] != a[right--]) return false;
}
return true;
}
void dfs(string s, int start, vector<string> out, vector<vector<string>> &res) {
if (start == s.size()) {
res.push_back(out);
return;
}
for (int i = start; i < s.size(); ++i) {
string tmp = s.substr(start, i - start + 1);
if (isPalindrome(tmp)) {
out.push_back(tmp);
dfs(s, i + 1, out, res);
out.pop_back();
}
}
}
vector<vector<string>> partition(string s) {
vector<string> out;
vector<vector<string>> res;
dfs(s, 0, out, res);
return res;
}
};