题目:
思路:第一想法–动态规划搞起
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官方题解查看)