132. Palindrome Partitioning II
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.
class Solution {
public:
int minCut(string s) {
vector<int> cutsDp;
cutsDp.resize(s.length());
for (int i = 1; i < s.length(); i++) {
cutsDp[i] = i;
}
for (int mid = 0; mid < s.length(); mid++) {
// check for odd length palindrome around mid index
findMinimumCuts(mid, mid, cutsDp, s);
// check for even length palindrome around mid index
findMinimumCuts(mid - 1, mid, cutsDp, s);
}
return cutsDp[s.length() - 1];
}
void findMinimumCuts(int startIndex, int endIndex, vector<int> &cutsDp,
string s) {
for (int start = startIndex, end = endIndex;
start >= 0 && end < s.length() && s[start] == s[end];
start--, end++) {
int newCut = start == 0 ? 0 : cutsDp[start - 1] + 1;
cutsDp[end] = min(cutsDp[end], newCut);
}
}
};