前言
现在是23-04-26 20:04,白天刚写完YOLO的一篇半的代码解析,已经身心疲惫了,看到题目知道是回溯,但大脑像泵机了一样,不想思考。写博客虽然占据了我大部分的时间,但是也让我心里的很多压力释放了出来。最近感觉好忙,马上5月了,距离保研又近了一个月。不想去想那么多了。
代码(看解析)
class Solution {
public:
vector<vector<string>> res;
deque<string> track;
vector<vector<string>> partition(string s) {
backtrack(s, 0);
return res;
}
void backtrack(string&s, int start) {
if(start == s.size()) {
res.push_back(vector<string>(track.begin(), track.end())); // deque转vector
return;
}
for(int i = start; i < s.size(); i++) {
if(!isPalindrome(s, start, i)) {
// s[start..i] 不是回文串,不能分割
continue;
}
track.push_back(s.substr(start, i-start+1));
backtrack(s, i+1);
track.pop_back();
}
}
bool isPalindrome(string& s, int lo, int hi) {
while(lo < hi) {
if(s[lo] == s[hi]) {
lo++;hi--;
} else {
return false;
}
}
return true;
}
};
本文介绍了如何使用C++实现回溯算法来解决LeetCode上的131题——分割回文串。作者分享了代码解析,详细解说了backtrack函数和isPalindrome函数的工作原理,并展示了如何将deque转换为vector存储结果。

被折叠的 条评论
为什么被折叠?



