文章目录
- 1. 题目
- 2. 回溯
1. 题目
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: "aab"
输出:
[["aa","b"],["a","a","b"]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-partitioning
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 回溯
class Solution {vector<vector<string>> ans;
public:vector<vector<string>> partition(string s) { vector<string> v;bt(s,v,0);//回溯算法return ans;}void bt(string &s, vector<string> &v, int i){if(i == s.size())//起始位置到达末尾,结束{ans.push_back(v);return;}for(int k = i; k < s.size(); k++)//从起点i往后遍历{if(ispalindrome(s,i,k))//如果是回文{v.push_back(s.substr(i,k-i+1));//加入bt(s,v,k+1);//对k后面的继续递归处理v.pop_back();//回溯,还原现场}}}bool ispalindrome(string &str, int i, int j){ //判断子串是否是回文串while(i < j)if(str[i++] != str[j--])return false;return true;}
};
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!