> For the complete documentation index, see [llms.txt](https://timmybeeflin.gitbook.io/cracking-leetcode/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://timmybeeflin.gitbook.io/cracking-leetcode/dynamic-programming/pattern-matching-dp/718.-maximum-length-of-repeated-subarray.md).

# 718. Maximum Length of Repeated Subarray

```
TC: O(mn)
SC: O(mn)
```

```java
class Solution {
    public int findLength(int[] nums1, int[] nums2) {
        int m = nums1.length;
        int n = nums2.length;
        int[][] dp = new int[m+1][n+1];
        
        int result = 0;
        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                if (nums1[i-1] == nums2[j-1]) {
                    dp[i][j] = dp[i-1][j-1]+1;
                    result = Math.max(result, dp[i][j]);
                }
            }
        }
        return result;
    }
}

/*
longest common subarray

TC: O(mn)
SC: O(mn)

xxxi
xxxj

if (a[i] == b[j]) dp[i][j] = dp[i-1][j-1]+1 
else 0


xxxi   a[i] != b[j], means no futher subarray meets, need recaculate
xxxj 

because there is 0 in the process, so we need take the max one in the process, so use a varible to record the max value

*/
```

```
```
