# [LeetCode 718. Maximum Length of Repeated Subarray](https://leetcode.com/explore/challenge/card/july-leetcoding-challenge-2021/609/week-2-july-8th-july-14th/3807/)
### Daily challenge Jul 8, 2021 (MEDIAN)
>Given two integer arrays **`nums1`** and **`nums2`**, return the maximum length of a subarray that appears in **both** arrays.
:::info
**Example 1:**
**Input:** nums1 = [1,2,3,2,1], nums2 = [3,2,1,4,7]
**Output:** 3
**Explanation:** The repeated subarray with maximum length is [3,2,1].
:::
:::info
**Example 2:**
**Input:** nums1 = [0,0,0,0,0], nums2 = [0,0,0,0,0]
**Output:** 5
:::
:::warning
**Constraints:**
* 1 <= nums1.length, nums2.length <= 1000
* 0 <= nums1[i], nums2[i] <= 100
:::
---
### Approach 1 : DP :book:
**`348 ms`** **`O(M * N)`** *where M, N are the length of A, B.*
>Let **`dp[i][j]`** be the longest common prefix of **`A[i:]`** and **`B[j:]`**. Whenever **`A[i] == B[j]`**, we know **`dp[i][j] = dp[i+1][j+1] + 1`**. Also, the answer is **`max(dp[i][j])`** over all *`i, j`*.
```cpp=1
class Solution {
public:
int findLength(vector<int>& nums1, vector<int>& nums2) {
int size1 = nums1.size();
int size2 = nums2.size();
vector<vector<int> > dp(size1+1, vector(size2+1, 0));
int MAX = INT_MIN;
for(int i=size1-1; i>=0; i--){
for(int j=size2-1; j>=0; j--){
dp[i][j] = (nums1[i] == nums2[j]) ? dp[i+1][j+1]+1 : 0;
MAX = max(MAX, dp[i][j]);
}
}
return MAX;
}
};
```