Leetcode:718. Maximum Length of Repeated Subarray

来源:互联网 发布:java开发是做什么的 编辑:程序博客网 时间:2024/06/05 03:19

Description

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

解题思路

本题求最长公共子数组问题,可采用最容易想到的遍历匹配方法求解

int findLength(vector<int>& A, vector<int>& B) {        int max = 0;        int count = 0;        int j = 0;        int lengthA = A.size();        int lengthB = B.size();        for (int i = 0; i < lengthA; ++i) {            count = 0;            j = 0;            if (lengthA - i <= max) break;            while (j != lengthB) {                if (i + count < lengthA && j + count < lengthB && A[i + count] == B[j + count]) {                    ++count;                } else {                    if (max < count) {                        max = count;                    }                    count = 0;                    ++j;                }            }        }        return max;    }

本题中有很多重复子问题,也可用动态规划进行求解
动态方程为
dp[i][j] = dp[i - 1][j - 1] + 1;
返回结果为
max = dp[i][j] > max ? dp[i][j] : max;

class Solution {public:    int findLength(vector<int>& A, vector<int>& B) {        int len1 = A.size();        int len2 = B.size();        int max = 0;        //初始化赋值为0        vector<vector<int>> dp(len1+1, vector<int>(len2+1,0));        for(int i = 1; i <= len1; i++) {            for (int j = 1; j <= len2; j++) {                if (A[i-1] == B[j-1]) {                    dp[i][j] = dp[i-1][j-1]+1;                    max = dp[i][j] > max ? dp[i][j] :max;                }            }        }        return max;    }};
阅读全文
0 0
原创粉丝点击