zoukankan      html  css  js  c++  java
  • 718. 最长重复子数组

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

    示例:

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

    提示:

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

    解:这道题一开始用动态规划做得,和最长公共子字符串一样的方法。还有种方法是用滑动窗口,好处是空间复杂度只有O(1)

    A和B两个字符串,先对其,然后计算公共字符串;然后A往后挪一位,继续计算。。

    同理,A计算完后B也要往后挪分别计算

    class Solution {
    public:
        int maxLength(vector<int>& A, vector<int>& B, int addA, int addB, int len) {
            int ret = 0, k = 0;
            for (int i = 0; i < len; i++) {
                if (A[addA + i] == B[addB + i]) {
                    k++;
                } else {
                    k = 0;
                }
                ret = max(ret, k);
            }
            return ret;
        }
        int findLength(vector<int>& A, vector<int>& B) {
            int n = A.size(), m = B.size();
            int ret = 0;
            for (int i = 0; i < n; i++) {
                int len = min(m, n - i);
                int maxlen = maxLength(A, B, i, 0, len);
                ret = max(ret, maxlen);
            }
            for (int i = 0; i < m; i++) {
                int len = min(n, m - i);
                int maxlen = maxLength(A, B, 0, i, len);
                ret = max(ret, maxlen);
            }
            return ret;
        }
    };
  • 相关阅读:
    数组
    Fiddler抓手机APP包
    APP测试注意点-安装卸载与运行
    【转】查看iOS崩溃日志
    Monkey 命令
    python del 函数
    探索性测试方法
    解决5037端口占用的方法
    App测试Android的闪退总结
    Jenkins邮件配置
  • 原文地址:https://www.cnblogs.com/wangshaowei/p/13236478.html
Copyright © 2011-2022 走看看