给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: “aab” 输出: [ [“aa”,“b”], [“a”,“a”,“b”] ]
思路: 回溯,判断每段是否是回文字符串
代码如下:
class Solution { public: vector<vector<string>> partition(string s) { if(s.empty()) return {{}}; vector<vector<string>>res; vector<string>path; backtrack(s,0,path,res); return res; } void backtrack(string s,int cur,vector<string>&path,vector<vector<string>>&res){ if(cur==s.size()){ res.push_back(path); } for(int end=cur+1;end<=s.size();end++){ string ss=s.substr(cur,end-cur); if(!isPalindrome(ss)) continue; path.push_back(ss); backtrack(s,end,path,res); path.pop_back(); } } bool isPalindrome(string& s){ int i=0; int j=s.size()-1; while(i<j){ if(s[i++]!=s[j--]) return false; } return true; } };