您的位置:首页 > 其它

132. Palindrome Partitioning II

2017-03-12 01:11 309 查看
问题描述

Given a string s, partition s such that every substring of the partition is a palindrome.

Return the minimum cuts needed for a palindrome partitioning of s.

For example, given s = “aab”,

Return 1 since the palindrome partitioning [“aa”,”b”] could be produced using 1 cut.

Subscribe to see which companies asked this question.

解决思路

动态规划。 但这里需要两个状态变量,一个是 isp[i][j]判断s[i…j]是否回文串,cut[i]表示s[0…i]的最小切割次数。

显然isp[i][i] = true,若i+1 < j-1 && s[i]==s[j],isp[i][j] = isp[i+1][j-1]

cut[i] 则可以在isp[k][i] == true的情况下,cut[i]为cut[k-1] (k =0,1,… i)加1的最小值。

代码

class Solution {
public:
int minCut(string s) {
if (s.length() == 0)
return 0;
int n = s.length();
vector<vector<bool>> isp(n,vector<bool>(n,false));
vector<int> cut(n,0);
for (int i = 0; i < n; ++i) {
int m = i;
for (int j = 0; j <= i; ++j) {
if (s[i] == s[j] && (j+1 > i-1 || isp[j+1][i-1])) {
isp[j][i] = true;
m = j==0 ? 0 : min(m, cut[j-1]+1);
}
}
cut[i] = m;
}
return cut[n-1];
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: