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.
这道题用DP来做,用一个一维数组表示从第i个元素到数组尾部的最小刀数,用一个二维数组记录从第i个元素到j个元素是否回文
class Solution {
public:
int minCut(string s) {
int length = s.size();
int *cuts = new int[length + 1];
for (int i = length; i >= 0; i--){
cuts[i] = length - i;
}
bool **matrix = new bool*[length];
for (int i = 0; i < length; i++){
matrix[i] = new bool[length];
memset(matrix[i], false, sizeof(bool)*length);
}
for (int i = length - 1; i >= 0; i--){
for (int j = i; j < length; j++){
if (s[i] == s[j] && (j - i < 2 || matrix[i + 1][j - 1])){
matrix[i][j] = true;
cuts[i] = min(cuts[i], cuts[j + 1] + 1);
}
}
}
return cuts[0] - 1;
}
};