思路:
DFS。
相当于需要把一个串分割成若干子串,每一个子串都必须是回文。
那么从start开始分,如果[s[start],s[i]]是回文,再从start+i开始分,递归下去。
class Solution {
private:
bool isPalindrome(const string s, int start, int end) {
while(start < end && s[start] == s[end]) {
start++;
end--;
}
return start >= end;
}
void dfs(string s, vector<vector<string>>& res, vector<string> &path, int start) {
if(start == s.size()) {
res.push_back(path);
return;
}
for(int i = start; i < s.size(); ++i) {
if(isPalindrome(s, start, i)) {
path.push_back(s.substr(start, i-start+1));
dfs(s, res, path, i+1);
path.pop_back();
}
}
}
public:
vector<vector<string>> partition(string s) {
vector<vector<string>> res;
vector<string> path;
dfs(s, res, path, 0);
return res;
}
};
本文介绍了一种使用深度优先搜索(DFS)实现的回文字符串分割算法。该算法能够将输入字符串分割为多个回文子串,并返回所有可能的分割方案。通过递归方式检查每个可能的分割点是否构成回文串,最终收集所有有效的分割路径。
1万+

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



