您的位置:首页 > 其它

LeetCode:Palindrome Partitioning(DP TLE)

2015-08-21 16:03 323 查看
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"]
]

动规还TLE 我也是醉了!

class Solution {
public:
vector<vector<string>> partition(string s) {
//dp解法
/*用来记录s[i]到s[j]是否为palindrome
dp[i][j]   1、s[i]==s[j]&&j-i<2
2、s[i]==s[j]&&s[i+1]到s[j-1]为palindrome
所以事先要知道dp[i+1][j-1] i是s.length-- j从i++
*/
const int n=s.size();

bool dp

;
fill_n(&dp[0][0],n*n,false);
for(int i=s.size()-1;i>=0;i--)
for(int j=i;j<n;++j)
if(s[i]==s[j]&&(j-i<2)||dp[i+1][j-1])
dp[i][j]=true;

//开始根据dp[i][j]截取字符串 获得结果

vector<vector<string>> sub_palins
;

for(int i=n-1;i>=0;i--)
for(int j=i;j<n;++j)
if(dp[i][j])
{
const string palindrome=s.substr(i,j-i+1);
if(j+1<n)
for(auto v:sub_palins[j+1])
{
v.insert(v.begin(),palindrome);
sub_palins[i].push_back(v);
}
else{
sub_palins[i].push_back(vector<string>{palindrome});
}
}

return sub_palins[0];
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: