/*************************************************************************
> File Name: PalindromePartitioningII.cpp
> Author: Shaojie Kang
> Mail: kangshaojie@ict.ac.cn
> Created Time: 2015年09月16日 星期三 17时24分57秒
> Problem:
Given a string s, cut s into some substrings such that every substring is a palindrome.
Return the minimum cuts needed for a palindrome partitioning of s.
Have you met this question in a real interview? Yes
Example
For example, given s = "aab",
Return 1 since the palindrome partitioning ["aa","b"] could be produced using 1 cut.
> Solution:
dp
************************************************************************/
#include<iostream>
#include<vector>
#include<limits.h>
using namespace std;
int minCut(string s)
{
int size = s.size();
if(size <= 1) return 0;
vector<vector<bool> > canCut(size, vector<bool>(size, false));
vector<int> count(size + 1, 0);
for(int i = size-1; i >= 0; --i)
{
count[i] = INT_MAX;
for(int j = i; j < size; ++j)
{
if(s[i] == s[j] && (j - i <= 1 || canCut[i+1][j-1]))
{
canCut[i][j] = true;
count[i] = min(count[i], count[j+1] + 1);
}
}
}
return count[0] - 1;
}
「动态规划」Palindrome Partitioning II
最新推荐文章于 2021-06-11 12:04:51 发布