动态规划
1、最长重复子数组
给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。
示例:
输入:
A: [1,2,3,2,1]
B: [3,2,1,4,7]
输出:3
解释:
长度最长的公共子数组是 [3, 2, 1] 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-length-of-repeated-subarray
典型的二维动态规划问题,转移条件,如果当前两个数字相等,则当前的状态为前一状态加1,当前数字不相等,以当前位置结尾的最长子数组为0
class Solution:
def findLength(self, A: List[int], B: List[int]) -> int:
dp = [[0] * (len(A) + 1) for i in range(len(B) + 1)]
for i in range(len(B)):
for j in range(len(A)):
if A[j] == B[i]:
dp[i + 1][j + 1] = dp[i][j] + 1
else:
dp[i + 1][j + 1] = 0
return max(map(max,dp))