解题步骤:
参考代码:
class Solution {
public:int minCut(string s) {int n=s.size();//保存s的所有子串是否是回文串的信息的哈希表vector<vector<bool>> hash(n,vector<bool>(n));for(int i=n-1;i>=0;i--){for(int j=i;j<n;j++){if(s[i]==s[j]){hash[i][j]=i+1<j?hash[i+1][j-1]:true;}}}vector<int> dp(n,INT_MAX);for(int i=0;i<n;i++){//如果[0,i]子串本来就是回文串,那么就无需分割,即dp[i]=0if(hash[0][i]==true){dp[i]=0;}else{//[0,i]子串不是回文串就要找到一个j,令[j,i]子串是回文串,并且//把[0,j-1]分割成回文串用最少的分割次数for(int j=1;j<=i;j++){if(hash[j][i]==true){dp[i]=min(dp[i],dp[j-1]+1);}}}}return dp[n-1];}
};
你学会了吗???