LeetCode 718. 最长重复子数组

题目描述

718. 最长重复子数组

image-20250418154831412

思路分析

🔄 寻找最长公共子串

本题本质是寻找最长公共子串,与最长公共子序列不同,子串必须连续

定义 dp[i][j] 表示以 nums1[i-1]nums2[j-1] 结尾的最长公共子数组的长度

image-20250509202206161

参考代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
func findLength(nums1 []int, nums2 []int) int {
	m, n := len(nums1), len(nums2)
	// dp[i][j] 表示以 num1[i-1] 和 num2[j-1] 结尾的最长公共子数组的长度
	dp := make([][]int, m+1)
	for i := 0; i <= m; i++ {
		dp[i] = make([]int, n+1)
	}

	res := 0
	for i := 1; i <= m; i++ {
		for j := 1; j <= n; j++ {
			if nums1[i-1] == nums2[j-1] {
				dp[i][j] = dp[i-1][j-1] + 1
				res = max(res, dp[i][j])
			}
		}
	}
	return res
}
  • 时间复杂度:O(m × n),m 和 n 分别是两个数组长度。
  • 空间复杂度:O(m × n),使用了一个二维数组。

➡️ 点击查看 Java 题解

1
write your code here

相似题目

image-20250507203355751

本文作者:
本文链接: https://hgnulb.github.io/blog/2025/15544319
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!