leetcode131 分隔回文串(Medium)
题目来源:leetcode131 分隔回文串
题目描述:
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: "aab"
输出:
[
["aa","b"],
["a","a","b"]
]
解题思路:
回溯,见代码。
class Solution {
public:
vector<vector<string>> ans;
//判断回文
bool judge(string s,int i,int j){
while(i<j){
if(s[i]==s[j]) {
i++;
j--;
}
else return false;
}
return true;
}
//回溯分隔
void backtrack(string s,int start,vector<string>& temp){
if(start==s.size()){
ans.push_back(temp);//一次分隔
return;
}
for(int i=start;i<s.size();i++){
if(!judge(s,start,i)) continue;
temp.push_back(s.substr(start,i-start+1));//选择
backtrack(s,i+1,temp);//回溯
temp.pop_back();//撤销选择
}
}
vector<vector<string>> partition(string s) {
vector<string> temp;
backtrack(s,0,temp);
return ans;
}
};