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

    从A串的结尾开始向前遍历,记当前pos为i。

    对每一个i,从B串的开始开始遍历,记当前pos为j,用dp[j]表示以i位置开头的A子串和以j位置开头的B子串最长重复串的长度。

    则在对B遍历时,若当前pos为j,则当前的dp[j+1]是上一次的结果,即以i+1位置开头的A子串和以j+1位置开头的B子串最长重复串的长度; 这时,若A[i]与B[j]相等,则dp[j] = dp[j+1] + 1,否则为0。

    上述也是表示了为什么要从B串的开头开始循环:为了在计算pos j 时, dp[j+1]记录的时pos i 的数据。也即若A[i]与B[j]相等, dp[i][j] = dp[i+1][j+1] + 1。

    考虑到边界情况,dp数组申请长度为B长度+1。

    我的代码:

    class Solution {
    public:
        int findLength(vector<int>& A, vector<int>& B) {
            int len1= A.size(), len2 = B.size();
            if (!len1 || !len2) return 0;
            vector<int> dp(len2+1);
            int re = 0;
            for (int i = len1 - 1; i >= 0; i--) {
                for (int j = 0; j < len2; j++) {
                    dp[j] = (A[i] == B[j])?(1 + dp[j+1]):0;
                    re = max(re, dp[j]);
                }
            }
            return re;
        }
    };
  • 相关阅读:
    4.17 杂七杂八
    常量指针与指针常量
    作用域与命名空间
    QDataStream序列化的使用
    Qthread类的使用和控制台打印中文!
    Qproces的启动
    在centos7上安装部署hadoop2.7.3和spark2.0.0
    每天一点存储知识:集群Nas
    git 提交某个内容
    pyspider—爬取视频链接
  • 原文地址:https://www.cnblogs.com/zmj97/p/7892572.html
Copyright © 2011-2022 走看看