131.分割回文串
给你一个字符串s
,请你将s
分割成一些 ,使每个子串都是。返回 s
所有可能的分割方案。
示例 1:
输入:s = "aab"
输出:[["a","a","b"],["aa","b"]]
示例 2:
输入:s = "a"
输出:[["a"]]
提示:
1 <= s.length <= 16
s
仅由小写英文字母组成
解题思路
1、判断回文字符串:双指针+while
循环
2、每一个字符后都设想有一个分割点,枚举每个分割点,满足条件就放入temp数组中,然后进行下一次分割
代码
cpp
class Solution {
public:
vector<vector<string>> partition(string s) {
vector<vector<string>> res;
vector<string> temp;
int index=0;
dfs(s,index,res,temp);
return res;
}
void dfs(string s,int index,vector<vector<string>>& res,vector<string>& temp){
if(index>=s.size()){
res.push_back(temp);
return;
}
for(int i=index;i<s.size();i++){
if(isHW(s,index,i)){
temp.push_back(s.substr(index,i-index+1));
dfs(s,i+1,res,temp);
temp.pop_back();
}
}
}
//利用双指针判断回文序列
bool isHW(string s,int left,int right){
while(left<right){
if(s[left]==s[right]){
left++;
right--;
}else{
return false;
}
}
return true;
}
};