您的位置:首页 > 其它

132. Palindrome Partitioning II (动态规划)

2017-05-25 19:09 441 查看

刷题地址

https://leetcode.com/problems/palindrome-partitioning-ii/#/description

AC

思路详解

http://blog.csdn.net/jin_kwok/article/details/51423222

超时代码:

class Solution {
public:
bool isPalindrome(string s, int sta, int en)
{
int i = sta;
int j = en;
while(i < j)
{
if(s[i] != s[j])
return false;
i ++;
j --;
}
return true;
}

int minCut(string s) {

int len = s.size();
vector<vector<int>> dp(len,vector<int>(len,0));
for(int i=0;i<len;i++)
{
dp[i][i] = 1;
for(int j = i + 1 ; j < len;j++)
{
if(isPalindrome(s,i,j))
dp[i][j] = 1;
}
}

vector<int> cnt(len + 1, 0);
cnt[len] = -1;
cnt[len-1] = 0;

for(int i=len-2; i>=0; i--)
{
cnt[i] = 1 + cnt[i+1];

for(int j = i+1;j < len;j++)
{
if(dp[i][j] == 1)
{
cnt[i] = min(cnt[i], 1 + cnt[j+1]);
}
}
}

return cnt[0];
}
};


2.ac代码

class Solution {
public:

int minCut(string s) {

int len = s.size();
vector<vector<int>> dp(len,vector<int>(len,0));

vector<int> cnt(len + 1, 0);
cnt[len] = -1;

for(int i=len-1; i>=0; i--)
{
cnt[i] = 1 + cnt[i+1];

for(int j = i;j < len;j++)
{
// s[i-j]的回文判断
if(s[i] == s[j] && (j-i<=1 ||dp[i+1][j-1] == 1) )
{
dp[i][j] = 1;

cnt[i] = min(cnt[i], 1 + cnt[j+1]);
}
}
}

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