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;
        }
    };
  • 相关阅读:
    查看服务器被动手脚
    cordova安卓sdk
    Nginx 启动报错 “/var/run/nginx/nginx.pid" failed”
    家庭里如何搭建一个互联网可访问的服务器
    Mysql5.7基于事务转为基于日志
    021 基本数据类型小结
    018 字符串类型及操作
    022 程序的控制结构
    020 实例4-文本进度条
    017 示例3-天天向上的力量
  • 原文地址:https://www.cnblogs.com/zmj97/p/7892572.html
Copyright © 2011-2022 走看看