题目:
Given a string s, partition s such that every substring of the partition is a palindrome.
Return all possible palindrome partitioning of s.
思路:主要是DFS搜索,假设到s[0~i]时是回形文,对 i 以后的的string分别进行判断能否组成回形文进行切割并存入临时变量里,一直到string尾为止,把结果加入最终的数组中,并退回进行搜索,退回时记得要删除临时变量里面已经记录过得string,相当于树的搜索,只是分支时是自己判断是否进行分支。
class Solution {
public:
bool ispalindrome(const string& s, int start, int end)
{
while(start<=end)
{
if(s[start++]!=s[end--])
return false;
}
return true;
}
void dfs(string &s,int index,vector<string> &path,vector<vector<string>> & re)
{
if(index==s.size())
{
re.push_back(path);
return;
}
for(int i=index;i<s.size();i++)
{
if(ispalindrome(s, index, i)) {
path.push_back(s.substr(index, i - index + 1));
dfs(s, i+1, path, re);
path.pop_back();
}
}
}
vector<vector<string>> partition(string s)
{
vector<vector<string>> re;
int len=s.size();
if(len==0) return re;
vector<string> path;
dfs(s, 0, path, re);
return re;
}
};
本文介绍了一种使用深度优先搜索(DFS)实现的算法,该算法能够找出字符串所有可能的回文子串切分方式。通过递归地检查每个子串是否为回文,并将符合条件的子串组合起来形成完整的切分方案。

175

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



