LeetCode 718. 最长重复子数组
题目描述
思路分析
🔄 寻找最长公共子串
本题本质是寻找最长公共子串,与最长公共子序列不同,子串必须连续。
定义
dp[i][j]
表示以nums1[i-1]
和nums2[j-1]
结尾的最长公共子数组的长度
参考代码
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),使用了一个二维数组。
1
write your code here
相似题目
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
本博客所有文章除特别声明外,均采用