分割回文串
题目描述
给你一个字符串 s,请你将 s 分割成一些 子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。
解题思路
这里不同于前几道题目,思路改了一下;
解题步骤:
- isHuiWen函数用于判断字符串是不是回文串;
- 开始进入回溯函数;
- 当剩余的字符串的长度为0的时候,把存入的分割子串放入答案列表;
- 定义一个临时字符串temp,数据是s从begin()到begin() + i;(这里需要注意迭代器的边界判断,搞了很久,最后本地调试了一下才过)
- 然后判断temp是不是回文串,如果是切割掉temp,把剩余的子串传入回溯函数;
- 如果不是回文串,继续遍历减少temp的长度,直到长度为1。
题解
class Solution {
public:
vector<vector<string>> ans;
vector<string> path;
bool isHuiWen(string s){
if(s.size() == 1){
return true;
}
int lp = 0, rp = s.size() - 1;
while(lp < rp){
if(s[lp] != s[rp]){
return false;
}
lp++;
rp--;
}
return true;
}
void BackTrack(string s){
if(s.size() == 0){
ans.push_back(path);
return;
}
for(int i = s.size(); i >= 1; i--){
string temp(s.begin(), s.begin() + i);
if(isHuiWen(temp)){
string nexts(s.begin() + i, s.end());
path.push_back(temp);
BackTrack(nexts);
path.pop_back();
}
}
return;
}
vector<vector<string>> partition(string s) {
BackTrack(s);
return ans;
}
};