1.7 KiB
1.7 KiB
题目地址
https://leetcode-cn.com/problems/palindrome-partitioning/
思路
C++代码
class Solution {
private:
vector<vector<string>> result;
// startIndex: 搜索的起始位置,vec: 放已经回文的子串
void search(const string& s, int startIndex, vector<string>& vec) {
// 如果起始位置已经大于s的大小,说明已经找到了一组分割方案了
if (startIndex >= s.size()) {
result.push_back(vec);
return;
}
for (int i = startIndex; i < s.size(); i++) {
if (isPalindrome(s, startIndex, i)) { // 是回文子串
// 获取[startIndex,i]在s中的子串
string str = s.substr(startIndex, i - startIndex + 1);
vec.push_back(str);
} else { // 如果不是则直接跳过
continue;
}
search(s, i + 1, vec); // 寻找i+1为起始位置的子串
vec.pop_back(); // 回溯过程,弹出本次已经填在的子串
}
}
bool isPalindrome(const string& s, int start, int end) {
for (int i = start, j = end; i < j; i++, j--) {
if (s[i] != s[j]) {
return false;
}
}
return true;
}
public:
vector<vector<string>> partition(string s) {
result.clear();
vector<string> vec;
search(s, 0 , vec);
return result;
}
};
更多算法干货文章持续更新,可以微信搜索「代码随想录」第一时间围观,关注后,回复「Java」「C++」 「python」「简历模板」「数据结构与算法」等等,就可以获得我多年整理的学习资料。