leetcode718最长重复子数组

leetcode 718 Maximum Length of Repeated Subarray

Posted by BY on July 1, 2020

前言

持续更新了

正文

问题来源

本问题来自leetcode上的718题。

问题描述

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

示例 1:

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

分析:

开始的时候把这个题理解成最长公共子序列了,然后按照动态规划的思想修改了

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}

func findLength(A []int, B []int) int {
    dp := make([][]int, len(A)+1)
    for i := 0; i <= len(A); i++ {
        dp[i] = make([]int, len(B)+1)
    }
    res := -1
    for i := 1; i <= len(A); i++ {
        for j := 1; j <= len(B); j++ {
            if A[i-1] == B[j-1] {
                dp[i][j] = dp[i-1][j-1] + 1
            } else {
                dp[i][j] = 0
            }
            res = max(res, dp[i][j])
        }
    }
    return res
}

总结:

勤思考。

结语

不管怎么样好好加油。