LeetCode:718. 最长重复子数组 - Python

  1. 最长重复子数组

问题描述:

给两个整数数组 nums1nums2 ,返回 两个数组中 公共的长度最长子数组长度

示例 1:

输入:nums1 = [1,2,3,2,1], nums2 = [3,2,1,4,7]

输出:3

解释:长度最长的公共子数组是 [3,2,1] 。

示例 2:

输入:nums1 = [0,0,0,0,0], nums2 = [0,0,0,0,0]

输出:5

提示:

  • 1 <= nums1.length, nums2.length <= 1000
  • 0 <= nums1[i], nums2[i] <= 100

问题分析:

  • 动态规划老题目了,前面有 LeetCode:1143. 最长公共子序列 - Python , 求子序列的题目,这个是子数组,如果是字符串的话就求子串,大家注意子串子序列是有区别的哦。子序列 一般是指的是相对位置不变就是子序列子串严格连续的。
  • 这个时候其实可以转换成公共前缀或者公共后缀(以什么结尾)的问题,设假设dp[i][j] 表示字符串text1[0:i]和字符串text2[0:j]最长公共后缀串的长度,现在讨论细节:
    (1) 很显然当i=0 or j=0时,dp0
    (2) text1[0:i] == text2[0:j] 时,很显然就上一个状态加上1,即:dp[i][j]=dp[i-1][j-1]+1
    (3) text1[0:i] != text2[0:j] 时,不相等,那就当前字符串text1[0:i]text2[0:j] 没有公共后缀串,所以就是0了,即:dp[i][j]=0,所以整体状态转移方差为:
python 复制代码
i=0 or j=0 : dp[i][j] = 0
nums1[i-1] == nums2[j-1]: dp[i][j] = dp[i-1][j-1] + 1
nums1[i-1] != nums2[j-1]: dp[i][j] = 0

Python3实现:

python 复制代码
# @Time   :2023/09/02
# @Author :Liu
# 动态规划

class Solution:
    def findLength(self, nums1: List[int], nums2: List[int]) -> int:

        m, n = len(nums1), len(nums2)
        dp = [[0] * (n + 1) for _ in range(m + 1)]
        ans, sub = 0, ''  # 最长公共子串长度,最长公共子串

        for i in range(1, m + 1):
            for j in range(1, n + 1):
                if nums1[i - 1] == nums2[j - 1]:
                    dp[i][j] = dp[i - 1][j - 1] + 1
                # else:
                #     dp[i][j] = 0  # 这一步其实没必要,本身就为0

                if ans < dp[i][j]:  # 更新最长子串
                    ans = dp[i][j]
                    # sub = nums1[i-ans: i]  # 获取字符串

        return ans  # , sub


if __name__ == '__main__':
    solu = Solution()
    nums1, nums2 = [1, 2, 3, 2, 1], [3, 2, 1, 4, 7]
    print(solu.findLength(nums1, nums2))  # 3 [3, 2, 1]

相关参考:题目链接
声明: 总结学习,有问题或不当之处,可以批评指正哦,谢谢。

相关推荐
满分观察网友z7 分钟前
告别烦人的“三连发”:我的智能评论系统过滤之旅(1957. 删除字符使字符串变好)
算法
小新学习屋8 分钟前
《剑指offer》-数据结构篇-哈希表/数组/矩阵/字符串
数据结构·leetcode·哈希表
满分观察网友z10 分钟前
滑动窗口下的极限挑战:我在实时数据流中挖掘最大价值分(1695. 删除子数组的最大得分)
算法
java1234_小锋12 分钟前
【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 热词数量分析日期统计功能实现
python·自然语言处理·flask
山烛27 分钟前
KNN 算法中的各种距离:从原理到应用
人工智能·python·算法·机器学习·knn·k近邻算法·距离公式
guozhetao40 分钟前
【ST表、倍增】P7167 [eJOI 2020] Fountain (Day1)
java·c++·python·算法·leetcode·深度优先·图论
吃着火锅x唱着歌43 分钟前
LeetCode 611.有效三角形的个数
算法·leetcode·职场和发展
墨染点香1 小时前
第七章 Pytorch构建模型详解【构建CIFAR10模型结构】
人工智能·pytorch·python
阿什么名字不会重复呢1 小时前
在线工具+网页平台来学习和操作Python与Excel相关技能
python·数据分析
Vertira2 小时前
python 阿里云 安装 dashscope的简介、安装
开发语言·python