其实这个数组换成字符串来看也是一样的
Given two integer arrays nums1
and nums2
, return the maximum length of a subarray that appears in both arrays.
Example 1:
Input: nums1 = [1,2,3,2,1], nums2 = [3,2,1,4,7] Output: 3 Explanation: The repeated subarray with maximum length is [3,2,1].
Example 2:
Input: nums1 = [0,0,0,0,0], nums2 = [0,0,0,0,0] Output: 5
Constraints:
1 <= nums1.length, nums2.length <= 1000
0 <= nums1[i], nums2[i] <= 100
这个跟最长公共子序列有异曲同工之妙
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number}
*/
var findLength = function(nums1, nums2) {
const m=nums1.length,n=nums2.length
const dp=new Array(m+1).fill(0).map(()=>{
return new Array(n+1).fill(0)
})
let maxnum=0
for(let i=1;i<=m;i++){
const c1=nums1[i-1]
for(let j=1;j<=n;j++){
const c2=nums2[j-1]
if(c1===c2){
dp[i][j]=dp[i-1][j-1]+1
if(dp[i][j]>maxnum){
maxnum=dp[i][j]
}
}else{
dp[i][j]=0
}
}
}
return maxnum
};