分割回文串II
/*
分割回文串II
给出一个字符串s,分割s使得分割出的每一个子串都是回文串
计算将字符串s分割成回文分割结果的最小切割数
例如:给定字符串s="aab",
返回1,因为回文分割结果["aa","b"]是切割一次生成的。
*/
class Solution {
public:
/**
*
* @param s string字符串
* @return int整型
*/
int minCut(string s) {
if (s.size() < 2)
return 0;
vector<int> dp(s.length()+1,INT_MAX);
//防止重复计算 用数组保存是否为回文串的结果
vector<vector<bool>> isP(s.length(), vector<bool>(s.length()));
dp[s.length()] = -1;
for (int i = s.length(); i >= 0; --i)
{
for (int j = i; j < s.length(); ++j)
{
if (s[i] == s[j] && (j - i < 2 || isP[i + 1][j - 1]))
{
isP[i][j] = true;
dp[i] = dp[i] < dp[j + 1] + 1 ? dp[i] : dp[j + 1] + 1;
}
else
{
isP[i][j] = false;
}
}
}
return dp[0];
}
};