您的位置:首页 > 其它

leetcode Palindrome Partitioning II

2013-07-09 13:28 274 查看
题意:给定一个字符串s,将s进行分割,分割后每一部分都是回文串,求最少的分割次数。

思路:此题是一个DP问题,设dp[i]为i到字符串s末尾满足要求所需要的最少切割次数,j > i。当i到j为回文数时,我们判断dp[i] = min(dp[i], 1 + dp[j + 1])。

代码实现:

class Solution {
public:
int minCut(string s) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int len = s.length();

int dp[len + 1];

for(int i = 0; i <= len; ++i)
{
dp[i] = len - i;
}

bool plain[len + 1][len + 1];
memset(plain, false, sizeof(plain));

for(int i = 0; i < len; ++i)
{
plain[i][i] = true;
}

for(int i = len - 1; i >= 0; --i)
{
dp[i] = min(dp[i], 1 + dp[i + 1]);
for(int j = i + 1; j < len; ++j)
{
if(((j - i) == 1 || plain[i + 1][j - 1]) && s[i] == s[j])
{
plain[i][j] = true;
dp[i] = min(dp[i], 1 + dp[j + 1]);
}
}
}

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