classSolution{public:intfindLength(vector<int>&nums1,vector<int>&nums2){constintm=nums1.size();constintn=nums2.size();intans=0;// dp[i][j] := max length of nums1[i:] and nums2[j:]vector<vector<int>>dp(m+1,vector<int>(n+1));for(inti=m-1;i>=0;--i)for(intj=n-1;j>=0;--j)if(nums1[i]==nums2[j]){dp[i][j]=dp[i+1][j+1]+1;ans=max(ans,dp[i][j]);}returnans;}};
classSolution{publicintfindLength(int[]nums1,int[]nums2){finalintm=nums1.length;finalintn=nums2.length;intans=0;// dp[i][j] := max length of nums1[i:] and nums2[j:]int[][]dp=newint[m+1][n+1];for(inti=m-1;i>=0;--i)for(intj=n-1;j>=0;--j)if(nums1[i]==nums2[j]){dp[i][j]=dp[i+1][j+1]+1;ans=Math.max(ans,dp[i][j]);}returnans;}}
classSolution:deffindLength(self,nums1:List[int],nums2:List[int])->int:m=len(nums1)n=len(nums2)ans=0# dp[i][j] := max length of nums1[i:] and nums2[j:]dp=[[0]*(n+1)for_inrange(m+1)]foriinreversed(range(m)):forjinreversed(range(n)):ifnums1[i]==nums2[j]:dp[i][j]=dp[i+1][j+1]+1ans=max(ans,dp[i][j])returnans