题目描述
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:
int minCut(string s) {
if (s.size()==0 || s.size()==1)
return 0;
vector<int> dp(s.size(), 0);
for (int i=1; i<s.size(); i++)//dp[i]初始化
dp[i] = isPalind(s.substr(0, i+1)) ? 0:i;
for (int i=1; i<s.size(); i++){
for (int j=0; j<=i; j++){
if (isPalind(s.substr(j+1, i-j)))
dp[i] = min(dp[i], dp[j] + 1);
else
dp[i] = min(dp[i], dp[j] + i-j);
}
}
return dp[s.size()-1];
}
int isPalind(string s){
if (s.size()==0 ||s.size()==1)
return 1;
int i=0;
int j=s.size()-1;
while(i<=j){
if (s[i] != s[j])
return 0;
else{
++i;
j--;
}
}
return 1;
}
};