当前位置: 首页 > news >正文

leetcode 718 最长公共子数组

在这里插入图片描述这个题目和最长公共子数组,类似于镜像题,子问题比较难想。对于 d p [ i ] [ j ] dp[i][j] dp[i][j] ,定义为分别以 i i i j j j 结尾的最长公共子数组(公共后缀)
核心代码:

if(nums1[i-1] == nums2[j-1]){
    dp[i][j] = dp[i-1][j-1]+1;
    if(dp[i][j] > ans)ans = dp[i][j];
}
else dp[i][j] = 0;

注意,和最长公共子序列不同的是,最后一个元素如果不相同,那 d p [ i ] [ j ] dp[i][j] dp[i][j] 需要赋值为0。其实相当于最长公共子序列的一个变种,核心代码和最长公共子序列一致。

typedef vector<int> V;
class Solution {
public:
    int findLength(vector<int>& nums1, vector<int>& nums2) {
        int n1 = nums1.size(), n2 = nums2.size();
        int ans = 0;

        vector<V> dp(n1+1, V(n2+1, 0));

        for(int i=1;i<=n1;i++){
            for(int j=1;j<=n2;j++){
                if(nums1[i-1] == nums2[j-1]){
                    dp[i][j] = dp[i-1][j-1]+1;
                    if(dp[i][j] > ans)ans = dp[i][j];
                }
                else dp[i][j] = 0;
            }
        }

        return ans;
    }
};

相关文章:

  • 汉诺塔问题——用贪心算法解决
  • Java数据库连接池详解:类型、特点、区别及配置方式
  • OpenCV 关键点定位
  • 在 Java 中实现异步编程:CompletableFuture 使用指南!
  • app逆向专题五:新快报app数据采集
  • wx212基于ssm+vue+uniapp的科创微应用平台小程序
  • 7个向量数据库对比:Milvus、Pinecone、Vespa、Weaviate、Vald、GSI 和 Qdrant
  • 详解 Https 和加密、摘要、签名、数字证书
  • 第十一天 - MySQL/SQLite操作 - 数据库备份脚本 - 练习:监控数据存储系统
  • 阿里通义实验室发布图片数字人项目LAM,实现高保真重建
  • 怎么免费下载glb格式模型、和gltf格式文件模型,还可以在线编辑修改
  • 基础购物车功能总结
  • Python asyncio 入门实战-1
  • 高级:Redis 面试题精讲
  • 前端快速入门
  • 【C++】内存分配与释放、内存碎片、内存泄漏、栈溢出
  • 大模型应用开发SpringAI实战-开发自己的MCP服务
  • 深入解析xDeepFM:结合压缩交互网络与深度神经网络的推荐系统新突破
  • Vue2,Vue3知识大全
  • 费马引理和罗尔定理
  • 竞彩湃|德甲欧冠资格竞争白热化,伯恩茅斯主场迎恶战
  • 马上评丨全民定制公交,打开城市出行想象空间
  • 巴基斯坦称成功拦截印度导弹,空军所有资产安全
  • 告别户口本!今天起婚姻登记实现全国通办
  • 韩国前国务总理韩德洙加入国民力量党
  • 洞天寻隐·学林纪丨玉洞桃源:仇英青绿山水画中的洞天与身体