题目: 思路:第一想法–动态规划搞起
class Solution { public int findLength(int[] A, int[] B) { int maxleng=0; int[][] result=new int[A.length][B.length]; //动态规划初始化 for(int i=0;i<A.length;i++){ if(A[i]==B[0]){ result[0][i]=1; maxleng=1; } } for(int i=0;i<B.length;i++){ if(B[i]==A[0]){ result[i][0]=1; maxleng=1; } } //动态规划 for(int i=1;i<B.length;i++){ for(int j=1;j<A.length;j++){ if(A[j]==B[i]){ result[i][j]=result[i-1][j-1]+1; if(result[i][j]>maxleng)maxleng=result[i][j]; } } } return maxleng; } }运行结果: 另外可以用一维数字来替代二维数组优化空间复杂度。 那么有没有其他可行的算法? 官方给出了滑动窗口的做法:由于文字不太容易描述直接上图(图摘自Leetcode题解区,作者:sdwwld) 此外官方还给出了另一种二分查找+Hash表的做法。(个人感觉很难想到就不列出了,有兴趣的小伙伴可以去leetcode官方题解查看)