这道题是说,给一个字符串,要把这个字符串分割,分割成几个回文串。写出所有的分割方案。
首先想到的方法是,从第一个字符串到最后一个字符串,每一个位置都可以选择分割或不分割。所以一个位置一个位置的遍历,再写一个判断一个字符串是否是回文串的函数。这样复杂度很高,本以为会超时,但是ac了。
class Solution {
public:
vector<vector<string>> partition(string s) {
vector<vector<string>> res;
vector<string> r;
backtracking(s, res, r, 0);
return res;
}
void backtracking(string s, vector<vector<string>>& res, vector<string>& r, int level)
{
if(level == s.size()){
res.push_back(r);
return;
}
for(int i = level + 1; i <= s.size(); ++i)
{
if(ispalindrome(s.substr(level, i - level)) == true){
r.push_back(s.substr(level, i - level));
backtracking(s, res, r, i);
r.pop_back();
}
}
}
bool ispalindrome(string s)
{
int start = 0, end = s.size() - 1;
while(start < end)
{
if(s[start] != s[end]) return false;
else{
start++;
end--;
}
}
return true;
}
};