132.leecode-Palindrome Partitioning II
这个题需要两个dp,一个保存从i到j是否为回文串
另一个保存0到i的最小的分割
下面是我的效率不太高的代码
class Solution { public: int minCut(string s) { vector<vector<bool> > dp(s.size(), vector<bool>(s.size(), false)); vector<int> res(s.size(), 0); //辅助数组 for(int i = 0; i < s.size(); i++) { for(int j = i, k = 0; j < s.size(); j++, k++) { if(j-k <= 1) dp[k][j] = s[k] == s[j] ? true : false; else dp[k][j] = (s[k] == s[j]) && (dp[k+1][j-1]); } } //如果0-i是回文串,那么不用切res[i]为0 //如果j-i是回文串,那么res[i]为res[j-1]+1 res[0] = 0; for(int i = 1; i < s.size(); i++) { res[i] = i; for(int j = 0; j <= i; j++) { if(dp[j][i]) res[i] = j == 0 ? 0 : min(res[i], res[j-1] + 1); } } return res[s.size()-1]; } };