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.
Example:
Input: "aab" Output: 1 Explanation: The palindrome partitioning ["aa","b"] could be produced using 1 cut.
#include <iostream>
#include <vector>
using namespace std;
int minCut(string s) {
int len = s.size();
vector<vector<int>> pally(len, vector<int>(len, 0));
vector<int> min_cut(len + 1, len - 1);
min_cut[0] = -1;
for(int i = 0; i < len; ++i){
for(int j = 0; j < i; ++j){
if(s[j] == s[i] && (i -j < 2 || pally[j + 1][i - 1])){
pally[j][i] = 1;
min_cut[i + 1] = min(min_cut[j] + 1, min_cut[i + 1]);
}
}
}
return min_cut[len];
}