前言
持续更新了
正文
问题来源
本问题来自leetcode上的718题。
问题描述
给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。
示例 1:
输入:
A: [1,2,3,2,1]
B: [3,2,1,4,7]
输出: 3
解释:
长度最长的公共子数组是 [3, 2, 1]。
分析:
开始的时候把这个题理解成最长公共子序列了,然后按照动态规划的思想修改了
func max(a, b int) int {
if a > b {
return a
}
return b
}
func findLength(A []int, B []int) int {
dp := make([][]int, len(A)+1)
for i := 0; i <= len(A); i++ {
dp[i] = make([]int, len(B)+1)
}
res := -1
for i := 1; i <= len(A); i++ {
for j := 1; j <= len(B); j++ {
if A[i-1] == B[j-1] {
dp[i][j] = dp[i-1][j-1] + 1
} else {
dp[i][j] = 0
}
res = max(res, dp[i][j])
}
}
return res
}
总结:
勤思考。
结语
不管怎么样好好加油。