【second】Palindrome Partitioning II
int minCut(string s) { // Note: The Solution object is instantiated only once and is reused by each test case. if(s.empty()) return 0; int n = s.size(); vector<vector<bool>> bPalin(n,vector<bool>(n,false)); int i,j; for(i=0;i<n;i++) bPalin[i][i] = true; for(i=0;i<n-1;i++) bPalin[i][i+1] = (s[i]==s[i+1]?true:false); for(i=n-3;i>=0;i--) for(j=i+2;j<n;j++) bPalin[i][j] = (bPalin[i+1][j-1]&&s[i]==s[j]?true:false); if(bPalin[0][n-1]) return 0; vector<int> dp(n); dp[0] = 0; for(j=1;j<n;j++) { if(bPalin[0][j]) dp[j] = 0; else { int mincut = j; for(i=1;i<=j;i++) { if(bPalin[i][j]) mincut = min(mincut,dp[i-1]+1); } dp[j] = mincut; } } return dp[n-1]; }