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.

题目意思是给定两个整型数组A和B,返回两个数组的公共子串的最大长度。
样例输入如下:

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 <= len(A), len(B) <= 1000
0 <= A[i], B[i] < 100

题目意思很明确,最长公共子数组问题,LCS用动态规划做比较合适。
取dp[i][j]表示A 数组到i位置,B数组到j位置时最长公共子数组长度,
转移方程为:

     if(A[i-1]==B[j-1]) {
          dp[i][j] = dp[i-1][j-1]+1;
    }  else{
          dp[i][j] = 0;
    }

然后用max变量记录最大的dp[i][j]
代码如下:

class Solution {
public:
    int findLength(vector<int>& A, vector<int>& B) {
        
        int lenA = A.size();
        int lenB = B.size();
        vector<vector<int>> dp(lenA+1,vector<int>(lenB+1,0)); // 初始化数组为0
        
        int max = 0; // 记录最大长度
        
        for (int i = 1;i <= lenA ;i ++) {
            for (int j = 1;j<=lenB;j ++) {
                if(A[i-1] ==  B[j-1]) {
                    dp[i][j] = dp[i-1][j-1] + 1;
                    if(dp[i][j] > max) max = dp[i][j];
                }else {
                    dp[i][j] = 0;
                }
            }
        }
        return max; 
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,357评论 0 33
  • 动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...
    廖少少阅读 8,862评论 0 18
  • 回溯算法 回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并...
    fredal阅读 14,695评论 0 89
  • 1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不...
    曲终人散Li阅读 8,645评论 0 19
  • 分治方法 将问题划分成互不相交的子问题 递归地求解子问题 将子问题的解组合起来 动态规划(两个要素:最优子结构、子...
    superlj666阅读 3,490评论 0 0

友情链接更多精彩内容