动态规划

动态规划

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))

你可能感兴趣的:(动态规划)