Advertisement
Singasking

https://leetcode.com/problems/palindrome-partitioning-ii/discussion/

Jan 14th, 2023
881
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.15 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     int isPallindrome(string a,int i,int j) {
  4.        
  5.         int e = j;
  6.         int s=i;
  7.         while(s<=e) {
  8.             if(a[s]==a[e]) { s++; e--; } else { return false;}
  9.         }
  10.         return true;
  11.     }
  12.  
  13.  
  14.  
  15.  
  16.     int f(int i,string s,vector<int> &dp) {
  17.    
  18.         //Using memoization;
  19.    if(i>=s.length()) return 0;
  20.    if(dp[i]!=-1) return dp[i];
  21.    int minC = 1e9;
  22.    bool ran=false;
  23.    for(int k=i;k<s.length();k++) {
  24.        if(isPallindrome(s,i,k)) {
  25.            ran=true;
  26.            int count = 1 + f(k+1,s,dp);
  27.            minC = min(minC,count);
  28.  
  29.        }
  30.    }
  31.    return  dp[i] = (!ran)?0:minC;
  32.     }
  33.  
  34.  
  35.  
  36.  
  37.     int minCut(string s) {
  38. //vector<int> dp(s.length()+1,-1);
  39.      //   return f(0,s,dp)-1;
  40.        
  41.  
  42.         vector<int> dp(s.length()+1,0);
  43.        
  44.         for(int i=s.length()-1;i>=0;i--) {
  45. int minC = 1e9;
  46.    bool ran=false;
  47.    for(int k=i;k<s.length();k++) {
  48.        if(isPallindrome(s,i,k)) {
  49.            ran=true;      
  50.            int count = 1 + dp[k+1];
  51.            minC = min(minC,count);
  52.  
  53.        }
  54.    }
  55.    dp[i]= (!ran)?0:minC;
  56.  
  57.         }
  58.       return dp[0]-1;
  59.     }
  60. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement