LeetCode 题解:718. 最长重复子数组,动态规划,JavaScript,详细注释

原题链接:https://leetcode-cn.com/problems/maximum-length-of-repeated-subarray/
解题思路:
- 假设 - A的长度为- m,- B的长度为- n。我们可以创建一个- (m+1)*(n+1)矩阵- dp,为避免递推第一个值时索引出现负数,- dp矩阵要创建第一行和第一列的初始值- 0,避免边界判断。
将A和B排列如下图:
 
 - 对于 - A的任意索引- i - 1,- B的任意索引- j - 1,如果- A[i - 1] === B[j - 1],当前子数组长度只需要在之前已知的公共子数组长度上加 1。如果不相等,当前统计的长度就为 0.
- 状态转移方程如下: 
复制代码
 复制代码
 推导结果如下图:
 
 - 由于 - dp[i][j]只与- dp[i - 1][j - 1],也就是左上角的状态有关,因此- dp矩阵可以优化成一个数组。
复制代码
 版权声明: 本文为 InfoQ 作者【Lee Chen】的原创文章。
原文链接:【http://xie.infoq.cn/article/00ddf5c6a8dfaf22addeac283】。文章转载请联系作者。











 
    
评论