Given a string s, partition s such that every substring of the partition is a palindrome.
Return all possible palindrome partitioning of s.
For example, given s = "aab",
Return
[
["aa","b"],
["a","a","b"]
]
Subscribe to see which companies asked this question
class Solution {
private:
void partitionHelper(string &s, int idx, vector<vector<bool>> &dp, vector<string> &curVtr, vector<vector<string>> &retVtr) {
if (idx == s.size())
{
retVtr.push_back(curVtr);
return;
}
for (int len=1; len<=(int)s.size()-idx; len++)
{
if (dp[idx][idx+len-1])
{
curVtr.push_back(s.substr(idx, len));
partitionHelper(s, idx+len, dp, curVtr, retVtr);
curVtr.pop_back();
}
}
}
public:
vector<vector<string>> partition(string s) {
vector<vector<string>> retVtr;
vector<string> curVtr;
vector<vector<bool>> dp(s.size(), vector<bool>(s.size()));
for (int i=0; i<s.size(); i++)
dp[i][i] = true;
for (int i=1; i<s.size(); i++)
if (s[i-1] == s[i])
dp[i-1][i] = true;
for (int len=2; len<=s.size()-1; len++)
{
//这里等号要注意
for (int i=0; i<=(int)s.size()-1-len; i++)
{
if (s[i] == s[i+len] && dp[i+1][i+len-1])
dp[i][i+len] = true;
}
}
partitionHelper(s, 0, dp, curVtr, retVtr);
return retVtr;
}
};

本文介绍了一种用于找出所有可能的回文字符串分割方案的算法。该算法通过递归方式实现,利用动态规划预先计算子串是否为回文,从而高效地解决此问题。
323

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



