这里用了dp数组记录最小值,第一位dp[0]=-1,目的很简单,当j=0,整体是回文串时, 代码可以复用,-1+1=0; 也可以用递归的方法
public:
/**
*
* @param s string字符串
* @return int整型
*/
bool isPalindrome(string& s, int j, int i)
{
string str = s.substr(j, i - j + 1);
int len = str.length();
for (int i = 0, j = len - 1; i < j; ++i, --j)
{
if (str[i] != str[j])
return false;
}
return true;
}
int minCut(string s) {
// write code here
int lens = s.length();
vector<int> dp(lens + 1);
for (int i = 0; i <= lens; ++i)dp[i] = i - 1;
for (int i = 1; i <= lens; ++i)
{
for (int j = 0; j < i; ++j)
{
if (isPalindrome(s, j, i-1))
dp[i] = min(dp[i], dp[j] + 1);
}
}
return dp[lens];
}
};