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”,
Return1since the palindrome partitioning[“aa”,”b”]could be produced using 1 cut.
class Solution {
public:
bool ok(string s, int start, int end)
{
int i = start;
int j = end;
while(j > start && i < end && i != j)
{
if(s[i] != s[j])
return false;
i++;
j--;
}
return true;
}
int minCut(string s)
{
int n = s.size();
if(n == 0)
return 0;
vector<int> dp(n, 0);
dp[0] = 0;
for(int i=1; i<n; i++)
{
dp[i] = ok(s, 0, i) ? 0 : i+1;
for(int j=1; j<=i; j++)
{
if(ok(s, j, i))
{
dp[i] = min(dp[i], dp[j-1] + 1);
}
}
}
return dp[n-1];
}
};