zoukankan      html  css  js  c++  java
  • [LeetCode] 718. Maximum Length of Repeated Subarray

    Given two integer arrays A and B, return the maximum length of an subarray that appears in both arrays.

    Example 1:

    Input:
    A: [1,2,3,2,1]
    B: [3,2,1,4,7]
    Output: 3
    Explanation: 
    The repeated subarray with maximum length is [3, 2, 1].

    Note:

    1. 1 <= len(A), len(B) <= 1000
    2. 0 <= A[i], B[i] < 100

    最长重复子数组。

    题目很好懂。这题可以同1143题一起做,几乎一模一样。

    既然是找子数组,而且暴力解一看复杂度就比较高,既要扫描两个数组又要找相同的部分,所以思路是尝试用动态规划来解决问题。动态规划的二维数组 dp[i][j] 的含义是以 A[i] 和 B[j] 为结尾的公共子数组的最长长度。

    • 当A[i] != B[j]时,dp[i][j] = 0, 因为以A[i]和B[j]结尾的公共子串不存在,因为他们最后一个字母不同
    • 当A[i] == B[j]时,dp[i][j] = dp[i-1][j-1] + 1, 因为A[i]和B[j]相等,以他们为结尾的最长公共子串的长度就是以A[i-1]和B[j-1]结尾的最长公共子串长度 + 1

    时间O(mn)

    空间O(1)

    Java实现

     1 class Solution {
     2     public int findLength(int[] A, int[] B) {
     3         int m = A.length;
     4         int n = B.length;
     5         int[][] dp = new int[m + 1][n + 1];
     6         int res = 0;
     7         for (int i = 1; i <= A.length; i++) {
     8             for (int j = 1; j <= B.length; j++) {
     9                 dp[i][j] = A[i - 1] == B[j - 1] ? dp[i - 1][j - 1] + 1 : 0;
    10                 res = Math.max(res, dp[i][j]);
    11             }
    12         }
    13         return res;
    14     }
    15 }

    JavaScript实现

     1 /**
     2  * @param {number[]} A
     3  * @param {number[]} B
     4  * @return {number}
     5  */
     6 var findLength = function (A, B) {
     7     let m = A.length;
     8     let n = B.length;
     9     let dp = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));
    10     let res = 0;
    11     for (let i = 1; i <= m; i++) {
    12         for (let j = 1; j <= n; j++) {
    13             dp[i][j] = A[i - 1] == B[j - 1] ? dp[i - 1][j - 1] + 1 : 0;
    14             res = Math.max(res, dp[i][j]);
    15         }
    16     }
    17     return res;
    18 };

    相关题目

    718. Maximum Length of Repeated Subarray

    1143. Longest Common Subsequence

    LeetCode 题目总结

  • 相关阅读:
    MySQL 通过多个示例学习索引
    git reset的用法
    git rebase的用法
    学习yii2.0——依赖注入
    学习yii2.0——行为
    学习yii2.0——事件
    学习yii2.0——数据验证
    让Apache和Nginx支持php-fpm模块
    安装python3
    使用php操作memcache
  • 原文地址:https://www.cnblogs.com/cnoodle/p/13217126.html
Copyright © 2011-2022 走看看