题目链接
思路分析
既然是要分割回文子串,那么就必须判断回文子串,所以需要一个判断回文子串的方法,其次我们要将处理好的回文子串保存起来。
- 这道题目必然需要采用回溯法来进行处理,如果当前字串已经是回文串了,就保存起来,如果不是,继续向下寻找。终止条件就是当寻找的索引**index >= s.size() **的话,就说明已经超出了范围
代码实现
class Solution {
vector<string> path;
vector<vector<string>> result;
public:
bool isTrue(const string& str,int start, int end)
{
int left = start;
int right = end;
while(left < right)
{
if(str[left] != str[right])
return false;
left++;
right--;
}
return true;
}
string getsubstr(const string& s, int start, int end)
{
string str = "";
for(int pos = start; pos <= end; ++pos)
{
str += s[pos];
}
return str;
}
void backtracking(string& s, int startIndex)
{
if(startIndex >= s.size())
{
result.push_back(path);
return ;
}
for(int i = startIndex; i < s.size(); ++i)
{
if(isTrue(s, startIndex, i))
{
string str = getsubstr(s, startIndex, i);
path.push_back(str);
}
else
{
continue;
}
backtracking(s, i+1);
path.pop_back();
}
}
vector<vector<string>> partition(string s) {
if(s.size() == 0)
return {};
backtracking(s, 0);
return result;
}
};