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 Explanation: The repeated subarray with maximum length is [0,0,0,0,0].
class Solution:
def findLength(self, nums1: List[int], nums2: List[int]) -> int:
# 因为需要连续的重复子序列 如何把连续加入构建dp中是难点
# 只需令dp[i][j] is the length of longest common suffix for A[:i] and B[:j]
# 极大的简化了条件转移方程,注意的地方在于最后一步需要对整个二维数组找最大值
n, m = len(nums1), len(nums2)
dp = [[0] * (m+1) for _ in range(n+1)]
for i in range(n):
for j in range(m):
if nums1[i] == nums2[j]:
dp[i][j] = dp[i-1][j-1] + 1
return max(max(row) for row in dp)