718. Maximum Length of Repeated Subarray
题目描述
Given two integer arrays A
and B
, return the maximum length of an subarray that appears in both arrays.
Example 1:
Input:
A: [1,2,3,2,1] B: [3,2,1,4,7]
Output: 3
Explanation: The repeated subarray with maximum length is [3, 2, 1].
Note:
- 1 <= len(A), len(B) <= 1000
- 0 <= A[i], B[i] < 100
分析
使用动态规划算法,首先需要找出做动态规划的状态,与状态转移方程。
设 C[i][j] 为以 A[i] 和 B[j] 结尾的最长子串的长度,可以看出这种状态表示方法可以表示找出最长子串。
状态转移方程:
C[i][j]=A[i]==B[j]?C[i−1][j−1]+1:0
当A[i] 和 B[j] 相等时,A[i - 1:] B[j - 1:] 的子串可以增长1,若不相等,则此处最长子串长度为0 。
得出解答:
class Solution(object):
def findLength(self, A, B):
dp=[[0]*(len(A)+1) for _ in xrange(len(B)+1)]
ans=0
# 从数组的末尾开始,从后向前遍历数组
for i in xrange(len(A)-1,-1,-1):
for j in xrange(len(B)-1,-1,-1):
if A[i]==B[j]:
dp[i][j]=1+dp[i+1][j+1]
ans=max(ans,dp[i][j])
return ans
最后两行可以合并
return max(max(row) for row in dp)