算法描述:
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.
解题思路:动态规划题。除了判断回文的辅助数组之外,还需要额外的数组记录最小分割次数。
int minCut(string s) { if(s.size() < 2) return 0; vector<vector<bool>> dp(s.size(), vector<bool>(s.size(),0)); vector<int> count(s.size(),0); for(int i=s.size()-1; i >=0; i--){ dp[i][i] = true; count[i]=s.size()-1-i; for(int j=i; j < s.size(); j++){ if(s[i]==s[j] && (j-i < 2 || dp[i+1][j-1])){ dp[i][j]=true; if(j==s.size()-1) count[i]=0; else count[i] = min(count[i],1+count[j+1]); } } } return count[0]; }