131. 分割回文串
难度中等370
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: "aab" 输出: [ ["aa","b"], ["a","a","b"] ]
题目来源:https://leetcode-cn.com/problems/palindrome-partitioning/
(参考lliweiwei题解)遍历字符串,看它是不是回文,如果是,则树继续长分支,否则剪枝。回溯
代码:
class Solution
{
public:
bool isPailndrome(string s, int left, int right)
{
while (left < right)
{
if (s[left] != s[right])
return false;
left++;
right--;
}
return true;
}
void backTracking(string s, int start, int len, vector<string> &path, vector<vector<string>> &res)
{
if (len == start)
{
res.push_back(path);
return;
}
for (int i = start; i < len; ++i)
{
//if [start, i] isn't a pailndrome then cut the tree
if (!isPailndrome(s, start, i))
continue;
//if [start, i] is a pailndrome,then born a branch
path.push_back(s.substr(start, i - start + 1));
backTracking(s, i + 1, len, path, res);
//backTrack
path.pop_back();
}
return;
}
vector<vector<string>> partition(string s)
{
int n = s.length();
vector<string> path;
vector<vector<string>> res;
backTracking(s, 0, n, path, res);
return res;
}
};