Advertisement
Rohit4Pal

Untitled

Jul 9th, 2021
1,038
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.40 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     int findLength(vector<int>& nums1, vector<int>& nums2) {
  4.        
  5.         int n=nums1.size(),m=nums2.size();
  6.         vector<vector<int>> dp(n,vector<int>(m,-1));
  7.         rep(nums1,nums2,0,0,dp);
  8.         vector<vector<int>> dp2(n,vector<int>(m,-1));
  9.         repRev(nums1,nums2,n-1,m-1,dp2);
  10.        
  11.         int x=INT_MIN;
  12.         for(int i=0;i<n;i++)
  13.             for(int j=0;j<m;j++)
  14.                 x=max(x,max(dp[i][j],dp2[i][j]));
  15.         return x;
  16.     }
  17.     int rep(vector<int> A,vector<int> B,int i,int j,vector<vector<int>> &dp){
  18.        
  19.         //base case
  20.         if(i==A.size() || j==B.size())
  21.             return 0;
  22.         if(dp[i][j] != -1)
  23.             return dp[i][j];
  24.        
  25.         if(A[i] == B[j])
  26.             dp[i][j]=1+rep(A,B,i+1,j+1,dp);
  27.         else{
  28.             dp[i][j]=0;
  29.             rep(A,B,i+1,j,dp);
  30.             rep(A,B,i,j+1,dp);
  31.         }
  32.        
  33.         return dp[i][j];
  34.     }
  35.     int repRev(vector<int> A,vector<int> B,int i,int j,vector<vector<int>> &dp){
  36.        
  37.         //base case
  38.         if(i<0| j<0)
  39.             return 0;
  40.         if(dp[i][j] != -1)
  41.             return dp[i][j];
  42.        
  43.         if(A[i] == B[j])
  44.             dp[i][j]=1+rep(A,B,i-1,j-1,dp);
  45.         else{
  46.             dp[i][j]=0;
  47.             rep(A,B,i-1,j,dp);
  48.             rep(A,B,i,j-1,dp);
  49.         }
  50.        
  51.         return dp[i][j];
  52.     }
  53. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement