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.
分析:
emmm, 不知道为啥,我想的状态转移方程和大家有出入,设f(i)是从0到第i个字符子串的分割次数。
f(i) = min{0,min{ f(j) + 1,j<i }}。意思是如果f(i)自己就是回文,那就不用分割,等于0.否则,就从0一直数到i-1,找最小的分割数。
代码:
class Solution {
public:
bool isPalindrome(string s)
{
for(int l=0, r=s.size()-1;l<r;++l,--r)
{
if(s[l]!=s[r])
return false;
}
return true;
}
int minCut(string s) {
vector<int> cut(s.size()+1,65535);
cut[0]=0;
for(int i=1;i<=s.size();++i)
{
if(isPalindrome(s.substr(0,i)))
{
cut[i]=0;
continue;
}
for(int j=0;j<i;++j)
{
string temp = s.substr(j,i-j);
if(isPalindrome(temp))
{
if(cut[i]>cut[j]+1)
cut[i]=cut[j]+1;
}
}
}
return cut[s.size()];
}
};