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

     

    给两个整数数组 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
     1 class Solution {
     2 public:
     3     int findLength(vector<int>& nums1, vector<int>& nums2) {
     4         int n = nums1.size();
     5         int m = nums2.size();
     6         int dp[n+1][m+1];
     7         //dp[i][j] 以i,j 为结尾的最长公共子串, 要求连续,所以不是从0到i是最长。
     8         //最终结果是 max(dp[i][j])
     9         for(int i = 0; i < n+1;++i) {
    10             dp[i][0] = 0;
    11         }
    12         for(int j = 0; j < m+1;++j) {
    13             dp[0][j] = 0;
    14         } 
    15         int res = 0;
    16         for(int i =1 ;i < n+1;++i) {
    17             for(int j = 1;j < m+1;++j) {
    18                 if(nums1[i-1]==nums2[j-1]) {
    19                     dp[i][j] = 1+dp[i-1][j-1];
    20                 } else {
    21                     dp[i][j] = 0; // 区别与最长子序列, s[i]!=ss[j],那么这2个子串没有公共子串
    22                     // [1,2,3] vs [1,2] 没有公共子串
    23                     // [1,2,3]以i为结尾的子串=[1,2,3][2,3]、[3]
    24                     // [1,2]以i为结尾的子串=[1,2][2]
    25                 }
    26                 res = max(res,dp[i][j]);
    27             }
    28         }
    29         return res;
    30     }
    31 };
  • 相关阅读:
    字符串实现变量映射
    纯css实现无限嵌套菜单
    flex布局嵌套之高度自适应
    easy ui 零散技巧
    js高级应用
    前端利器
    css高级应用及问题记录(持续更新)
    兼容性验证方案
    原生js判断元素是否可见
    vue-cli webpack躺坑之旅
  • 原文地址:https://www.cnblogs.com/zle1992/p/15271005.html
Copyright © 2011-2022 走看看