给你一个字符串 s
,请你将 s
分割成一些子串,使每个子串都是 回文串 。返回 s
所有可能的分割方案。
回文串 是正着读和反着读都一样的字符串。
思路:注意单层逻辑里的else continue;substr是初始下标+n个元素了;判断是否为回文串的函数用双指针。
class Solution {
private:
vector<vector<string>> result;
vector<string> path;
public:
void backtracking(string& s,int startIndex){
//终止条件
if(startIndex>=s.size())
{
result.push_back(path);
return;
}
//单层处理
for(int i=startIndex;i<s.size();i++)
{
//判断从startIndex->i是否为回文串
if(isPalindrome(s,startIndex,i))
{
//substr 从某下标开始n个元素
string str=s.substr(startIndex,i-startIndex+1);
path.push_back(str);
}
else continue;
backtracking(s,i+1);
path.pop_back();
}
}
bool isPalindrome(string& st,int start,int end){
for(int i=start,j=end;i<j;i++,j--)
{
if(st[i]!=st[j]) return false;
}
return true;
}
vector<vector<string>> partition(string s) {
result.clear();
path.clear();
backtracking(s,0);
return result;
}
};