【数据结构笔记】Leetcode:718. 最长重复子数组(动态规划)

给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。
示例 1:

输入:
A: [1,2,3,2,1]
B: [3,2,1,4,7]
输出: 3
解释: 
长度最长的公共子数组是 [3, 2, 1]

说明:
1 <= len(A), len(B) <= 1000
0 <= A[i], B[i] < 100
PYTHON:

class Solution(object):
    def findLength(self, A, B):
        """
        :type A: List[int]
        :type B: List[int]
        :rtype: int
        """

        n1 = len(A)
        n2 = len(B)
        dp = [[0 for _ in range(n2+1)] for _ in range(n1+1)]

        for i in range(1,n1+1):
            for j in range(1,n2+1):
                # print i,j
                if A[i-1] == B[j-1]:
                    dp[i][j] = dp[i-1][j-1] + 1
        return max(max(row) for row in dp)

C语言:

int findLength(int* A, int ASize, int* B, int BSize) {

    if (!ASize || ! BSize)
        return 0;
    int dp[ASize+1][BSize+1];
    for(int i = 0;i<ASize+1;i++)
        for(int j =0;j < BSize+1;j++)
            dp[i][j] = 0;
    for(int i = 1;i<ASize+1;i++)
        for(int j =1;j < BSize+1;j++)
            if(A[i-1] == B[j-1])
                dp[i][j] = dp[i-1][j-1] + 1;
    int max = 0 ;         
    for(int i = 0;i<ASize+1;i++)
        for(int j =0;j < BSize+1;j++)
            if (dp[i][j] >= max)
                max = dp[i][j];
    return max;   
}

猜你喜欢

转载自blog.csdn.net/m0_37477175/article/details/80273231