LeetCode 131. 分割回文串
之前想用回溯递归树怕爆栈,没想到真的可以。。。。
主体思想还是利用枚举当前前缀子串进行判定,如果是回文子串则进行后缀的下一次递归判定,如果不是回文子串,放弃当前枚举前缀,重新选取一个前缀;

如果采用dp进行回文子串的事先判定可能更快一点;
采用单纯回溯判定:
class Solution {
public:
bool check(int st, int la, string& s) {
while (st < la) {
if (s[st] != s[la]) {
return false;
}
st++;
la--;
}
return true;
}
void fun(int st, int la, vector<vector<string>>& res, vector<string>& re, string& s) {
if (st ==la) {
re.push_back(s.substr(st, 1));
res.push_back(re);
re.pop_back();
return;
}
else if (st > la) {
res.push_back(re);
}
for (int i = st; i <= la; i++) {
if (!check(st, i, s))
continue;
re.push_back(s.substr(st, i- st + 1));
fun(i + 1, la, res, re, s);
re.pop_back();
}
}
vector<vector<string>> partition(string s) {
vector<vector<string>> res;
vector<string>re;
if (s.size() == 0)
return res;
fun(0, s.size()-1, res, re, s);
return res;
}
};
也可以采用dp二维数组来事前判定,从而省去了check函数的判定,这样更快;

浙公网安备 33010602011771号