【LeetCode】718. 最长重复子数组

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time: 2019/3/22
# @Author: xfLi
# The file...

"""
问题分析:
动态规划方法,设 dp[i][j] 表示子数组 A[:i] 和子数组 B[:j] 最长的子数组的长度,很显然得出状态方程:
A[i - 1] == B[j - 1],  dp[i][j] = dp[i - 1][j - 1] + 1
"""

def findLength(A, B):
    n, m = len(A) + 1, len(B) + 1
    dp = [[0] * m for _ in range(n)]
    ans = 0
    for i in range(1, m):
        for j in range(1, n):
            if A[i - 1] == B[j - 1]:
                dp[i][j] = dp[i-1][j-1] + 1
                ans = max(ans,dp[i][j])
    return ans

if __name__ == '__main__':
    A, B = [1, 2, 3, 2, 1], [3, 2, 1, 4, 7]
    result = findLength(A, B)
    print(result)

 

你可能感兴趣的:(python,算法,LeetCode,最长重复子数组)