Advertisement
Rohit4Pal

Untitled

Aug 7th, 2021
1,323
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.91 KB | None | 0 0
  1. class Solution {
  2.    
  3. public:
  4.     int minCut(string s) {
  5.        
  6.         int n=s.length();
  7.         vector<vector<int>> dp(n,vector<int> (n,-1));
  8.         dp[0][n-1]=PalPartition(0,n-1,s,dp);
  9.        
  10.         return dp[0][n-1];
  11.     }
  12.     int PalPartition(int i,int j,string s,vector<vector<int>> &dp){
  13.        
  14.         //base case
  15.         if(i>j)     return 0;
  16.         if(dp[i][j] != -1)  return dp[i][j];
  17.         if(isPalindrome(s,i,j))     return 0;
  18.        
  19.         int cuts=INT_MAX-1,tempCut=0;
  20.         for(int k=i;k<j;k++){
  21.             tempCut=1+PalPartition(i,k,s,dp)+PalPartition(k+1,j,s,dp);
  22.             cuts=min(cuts,tempCut);
  23.         }
  24.         dp[i][j]=cuts;
  25.         return dp[i][j];
  26.     }
  27.     bool isPalindrome(string s,int i,int j){
  28.        
  29.         while(i<j){
  30.             if(s[i] != s[j])
  31.                 return false;
  32.             i++;j--;
  33.         }
  34.         return true;
  35.     }
  36. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement