Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public:
- int findLength(vector<int>& nums1, vector<int>& nums2) {
- int n=nums1.size(),m=nums2.size();
- vector<vector<int>> dp(n,vector<int>(m,-1));
- rep(nums1,nums2,0,0,dp);
- vector<vector<int>> dp2(n,vector<int>(m,-1));
- repRev(nums1,nums2,n-1,m-1,dp2);
- int x=INT_MIN;
- for(int i=0;i<n;i++)
- for(int j=0;j<m;j++)
- x=max(x,max(dp[i][j],dp2[i][j]));
- return x;
- }
- int rep(vector<int> A,vector<int> B,int i,int j,vector<vector<int>> &dp){
- //base case
- if(i==A.size() || j==B.size())
- return 0;
- if(dp[i][j] != -1)
- return dp[i][j];
- if(A[i] == B[j])
- dp[i][j]=1+rep(A,B,i+1,j+1,dp);
- else{
- dp[i][j]=0;
- rep(A,B,i+1,j,dp);
- rep(A,B,i,j+1,dp);
- }
- return dp[i][j];
- }
- int repRev(vector<int> A,vector<int> B,int i,int j,vector<vector<int>> &dp){
- //base case
- if(i<0| j<0)
- return 0;
- if(dp[i][j] != -1)
- return dp[i][j];
- if(A[i] == B[j])
- dp[i][j]=1+rep(A,B,i-1,j-1,dp);
- else{
- dp[i][j]=0;
- rep(A,B,i-1,j,dp);
- rep(A,B,i,j-1,dp);
- }
- return dp[i][j];
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement