解题思路:
在num1中找到一个子序列,在num2中找到一个子序列,它们一一对应,即它们相等。所以问题转换为求最长相同子序列。
class Solution { public int maxUncrossedLines(int[] nums1, int[] nums2) { int len1=nums1.length,len2=nums2.length; int[][] dp=new int[len1+1][len2+1]; for(int i=0;i<len1;i++){ for(int j=0;j<len2;j++){ if(nums1[i]==nums2[j]){ dp[i+1][j+1]=Math.max(dp[i+1][j+1],dp[i][j]+1); } else{ dp[i+1][j+1]=Math.max(dp[i+1][j+1],Math.max(dp[i][j+1],dp[i+1][j])); } // System.out.println(i+" "+j+" "+dp[i+1][j+1]); } } return dp[len1][len2]; } }
05-21
124
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
09-27
89
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
03-02
03-02
06-06