最长公共子串问题--动态规划

0012算法笔记——【动态规划】最长公共子串问题 1、问题相关定义:           (1)字符串:一个字符串S是将n 个字符顺次排列形成的数组, n称为S的长度,表示为len(S) 。S的第i字符表示为S[ i ]。       (2)子串:字符串S的子串S[ i:j ] ( i ≤ j)表示S串中从i到j这一段,也就是排列S[ i ] , S[ i + 1 ] , ⋯,S[ j ] 形成的字符串。       (3)后缀:后缀是指从 阅读详情
/**
     * @Date: 2020-03-30
     * @Description: 最长公共子串问题
     */
    public static void longestCommonSubstring(char[] A, char[] B) {
        int n = A.length;
        int m = B.length;
        int[][] C = new int[n + 1][m + 1];
        int lMax = 0, pMax = 0;
        //初始化
        for (int i = 0; i <= n; i++) {
            C[i][0] = 0;
        }
        for (int i = 0; i <= m; i++) {
            C[0][i] = 0;
        }
        for (int i = 1; i < n; i++) {
            for (int j = 1; j < m; j++) {
                if (A[i] != B[j]) {
                    C[i][j] = 0;
                } else {
                    C[i][j] = C[i - 1][j - 1] + 1;
                    if (C[i][j] > lMax) {
                        lMax = C[i][j];
                        pMax = i;
                    }
                }
            }
        }
        printSubstringRec(A, lMax, pMax);
    }

    public static void printSubstringRec(char[] A, int lMax, int pMax) {
        if (lMax == 0) {
            return;
        }
        for (int i = pMax - lMax + 1; i <= pMax; i++) {
            System.out.println(A[i]);
        }
    }

 

最长公共子串问题 动态规划 1、问题描述:来源于《算法与数据结构题目最优解》左程云著 给定两个字符串str1和str2,返回两个字符串的最长公共子串,例如:str1="1AB2345CD",str2="12345EF",返回"2345" 2、问题分析 1)这个题目看起来和最长公共子序列很相似,在第一遍做的时候我也是做成了最长公共子序列,但是公共子串必须是连续的; 2)问题的关键在于状态的寻找,我觉得这个题 阅读详情

相关推荐

动态规划经典问题 - 求最长公共子串 / 公共子序列

首先要理解公共子串和公共子序列 公共子串和公共子序列是两个不相同的概念, 公共子串要求字符连续, 公共子序列不要求字符连续。 比如: 字符串"ascde", “axcxdde” 最长公共子串是 “de” , 因为 "de"在两个字符串中都是连续的 最长公共子序列是 “acde”, 不要求连续, 只要满足两个字符串中子序列前后顺序的一致即可 动态规划求最长公共子序列 动态规划的核心是 base case 状态转移方程 自下而上 我们可以通过状态转移表来帮助我们得出状态转移方程 这里我直接说结论: 我们思考

chenyao的博客~ 1963

求两字符串最长公共子序列——动态规划

1.“两字符串最长公共子序列”的概念;         一个字符串的子序列,是指从该字符串中去掉任意多个字符后剩下的字符在不改变顺序的情况下组成的新字符串。这个子序列是可以不连续的。最长公共子序列,是指多个字符串可具有的长度最大的公共的子序列。举个例子,如:有两条随机序列,如 1 3 4 5 5 and 2 4 5 5 7 6,则它们的最长公共子序列便是:4 5 5。注意最长公共子串和最长公共子

时空霹雳的专栏 7063

最长公共子串LCS问题(动态规划及备忘录方法)

动态规划与备忘录的LCS实现 动态规划从下到上积累能量,中间值全部记录以方便后期计算时调用,但有些时候很多记录的值用不到,这个时候备忘录方法则更好,可以减少记录的值,其特点是自上到下,记录少部分值。以LCS最长公共子串问题威力,分别给出两种实现。 动态规划法: package longestCommonSubstring; public class LCS_1 { public stat...

JeffLee的博客 2985

最长公共子串(动态规划)

描述: 计算两个字符串的最大公共子串(Longest Common Substring)的长度,字符不区分大小写。 输入: 输入两个字符串 输出: 输出一个整数 样例输入: asdfas werasdfaswer 样例输出: 6 参考网址:http://blog.youkuaiyun.com/u013074465/article/details/45

yanyanwenmeng的博客 611

动态规划解决最长公共子串问题

动态规划解决最长公共子串问题 作者:禅与计算机程序设计艺术 1. 背景介绍 最长公共子串问题是一个经典的字符串处理问题,它要求找出两个给定字符串的最长公共子串。这个问题在很多实际应用中都有重要的意义,比如生物信息学中DNA序列分析、文本挖掘中的文档相似度计算、版本控制系统中的差异

AI架构师小马 200

KMP算法,求子字符串位置

数据结构书上的KMP算法,书上的算法看的不太明白,自己写了一个,有点罗嗦。 也是自己写的,容易看懂

图解最长公共子串问题:动态规划

文章深入探讨了最长公共子串问题的动态规划解法及优化拓展。从问题定义出发,清晰区分了子串与子序列的区别。核心介绍了动态规划法,利用二维数组记录以两个字符结尾的最长公共子串长度,状态转移方程根据字符是否匹配决定。重点图文讲解了填充二维数组的过程,使动态规划的原理更易理解。此外,给出了空间优化技巧,附代码实现详细说明。最后,提供拓展思路。

m0_74496615的博客 2530

深入Google DroidGuard:剖析其自定义虚拟机如何守护Android应用安全(附pcbc文件机制解析)

本文深入解析Google DroidGuard自定义虚拟机如何通过独特的架构设计和加密机制保护Android应用安全。DroidGuard采用动态密钥派生、全加密执行环境和pcbc文件机制,有效防御逆向工程和自动化攻击,为移动安全提供新思路。

weixin_34254464的博客 307

动态规划从入门到精通 最长公共子串、最长公共子序列问题

子串和子序列都是原字符串或序列的一部分,它们的区别在于子串是相邻的字符组成的一段连续子序列,而子序列是从原序列中取出若干个元素组成的子序列,不一定是相邻的。 最长公共子串问题公式解说:如果两个字母不相同,值为0;如果两个字母相同,值为左上角的值加1,最长公共子串的问题的最终答案并不是在最后一个单元格中,答案为网格中最大的数字——他可能并不位于最后的单元格中。最长公共子序列公式解说:如果两个字母不同,就选择上方和左方中较大的那个,如果两个字母相同,就等于左上方单元格的值加1

m0_62793538的博客 1412

stm32学习笔记-启动文件

1、配置栈 Stack_Size EQU 0x00000400 AREA STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem SPACE Stack_Size __initial_sp EQU:相当于C中的define,定义Stack_Size = 0x00000400。 AREA: 指...

某风吾起的博客 4531

MySQL安装配置教程(超级详细)

一、 下载MySQL Mysql官网下载地址:MySQL :: Download MySQL Installer (Archived Versions) 1. 选择要安装的版本,本篇文章选择的是5.7.31版本,点击Download下载 正在上传…重新上传取消 二、 安装MySQL 1. 选择设置类型双击运行mysql-installer-community-5.7.31.0.msi 这里选择是自定义安装,所以直接选择“Custom”,点击“Next” “Developer Default”是

m0_67322837的博客 5万+

算法复习——动态规划篇之最长公共子串问题

算法复习——动态规划篇之最长公共子串问题 以下内容主要参考中国大学MOOC《算法设计与分析》,墙裂推荐希望入门算法的童鞋学习! 1. 问题背景 子串:给定序列中零个或多个连续的元素(如字符)组成的子序列 公共子串: 给定两个序列XXX和YYY 公共子串示例 ​ 问题是如何求两个给定序列的最长公共子串? 2. 问题定义 最长公共子串问题(Longest Common Substring Problem) 输入: 序列X=<x1,x2,…,xn>X=<x_1, x_2,

NickHan_cs的博客 946

AI Agent核心架构解析:从Tool、Skill到MCP协议的智能体构建实战

在人工智能领域,大语言模型(LLM)赋予了AI自主规划与决策的能力,推动了智能体(Agent)技术的演进。其核心原理在于构建一个具备感知、规划、行动与反思能力的自主系统。这一架构的技术价值在于将AI从被动应答升级为主动执行复杂任务的工作伙伴,显著提升了自动化水平与问题解决效率。应用场景广泛覆盖了市场分析、自动化办公、智能客服与垂直领域集成等。本文聚焦于实现这一能力的关键组件:基础工具(Tool)、组合技能(Skill)与标准化协议(MCP)。其中,Skill通过封装多个Tool形成可复用的高级能力,而MCP

chuannaoxuan4674的博客 322

动态规划之最长公共子串问题

最长公共子串问题:一个给定序列的子序列是在该序列中删去若干元素后得到的序列。给定两个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共子序列。最长公共子串就是求给定两个序列的一个最长公共子序列。例如,X=“ABCBDAB”,Y=“BCDB”是X的一个子序列。 刚写完0-1背包问题,感觉有些细节还是不是太清楚,又看了这题,感觉收获很大。 在草稿纸上写了循环内部的过程,

孤独正患者的专栏 1018

[Dify 实战] 如何在内网环境部署 Dify 应用:彻底离线的企业级方案解析

企业内网环境如何离线部署Dify?本文提供详细教程:Dify作为开源AI平台,支持完全离线部署,无需外网访问。文中介绍两种部署方式:推荐使用Docker一键部署,也可选择源码安装定制化方案。重点讲解内网模型配置(支持Ollama/GPT-OSS等)、知识库存储(MinIO/PostgreSQL)及内网代理设置,并给出常见问题排查方法。该方案适用于金融、政府等对数据安全要求高的场景,确保敏感数据不泄露,实现完全本地化的AI应用闭环。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 455

智能车图像处理11-进阶篇3--中线累积差值的统计

中线累积差值的统计在后面判断小S,以及长直道的时候都有用到,关键点在于中线的跳变 第12 - 13 行:comulants1 和comlants2代表的是两种不同的累差,取的行数不同 第14-17 行:comulants2取6到25行,其实就是My_Abs(LCenter[i], LCenter[i - 1])的累加 第18-21 行:comulants1去第1到40行 第27- 行: 计算了一下右线的开始于最终结束行,这里判断R_black是否为0,是和中线的提取中g

taiyuezyh的博客 3830

算法回顾 - 动态规划 之 最长公共子串问题

最长公共子串问题:   一个给定序列的子序列是在该序列中删去若干元素后得到的序列,例如,X=“ABCBDAB”,Y=“BCDB”是X的一个子序列。给定两个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共子序列。最长公共子串就是求给定两个序列的一个最长公共子序列。 问题分析:     给定两个序列A和B,称序列Z是A和B的公共子序列,是指Z同是A和B的子序

define_c的专栏 476

第8讲:基于CST PCB Studio的电源完整性仿真(IR Drop + PDN)

本文系统介绍了电源完整性(PI)仿真的两大核心模块:直流IRDrop仿真与交流PDN阻抗仿真。文章详细阐述了两种仿真的原理、算法(PEEC和3DFE-FD)及完整操作流程,包括参数配置、软件实操步骤和常见问题解决方案。IRDrop仿真用于分析直流供电压降问题,PDN仿真则针对高频电源噪声和谐振问题。文中还提供了优化建议和故障排查方法,如调整铜箔厚度、优化电容布局等,为高速数字系统的电源完整性设计提供了全面的技术指导。(149字)

一只豌豆象的博客 240

Java动态规划求解最长公共子串问题

最长公共子串问题:一个给定序列的子序列是在该序列中删去若干元素后得到的序列。给定两个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z 是序列X和Y的公共子序列。最长公共子串就是求给定两个序列的一个最长公共子序列。例如,X=“COBEBRANT”,Y=“COBAT”是X

iloveyou1098的专栏 3545

一根网线,让整个公司断网,二层环路真实事故复盘

那天晚上 23:47,监控告警突然爆了。核心交换机 CPU 100%。ARP 表暴涨。广播流量飙升。业务系统集体超时。5 分钟后,全公司断网。运维群里一句话:“是不是黑客攻击?但老网工都知道,这种现象只有一种可能:二层环路。

网络技术联盟站 350

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

[动态规划] 最长公共子串问题

动态规划 - 最长公共子串

一个码农的前三十年 455

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

动态规划求解最长公共子串的问题

2. 动态规划求解最长公共子串的问题 2.1 问题描述: Description     找出2个给定字符串中最长的公共子字符串 Prototype       void vProcTaskToCoreByLayerAndTime(unsigned int Layer,unsigned int* pDuration) Input Param     char* pSrcStr1, ch

sinapme的专栏 631

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

算法练习:动态规划(最长公共子串问题)

最长公共子串问题

wjmhlh的博客 869

算法图解: 动态规划求解背包问题、最长公共子串、最长公共子序列

目录 背包问题 练习 最长公共子串 最长公共子序列 练习 背包问题 问题描述:假设你是个小偷,背着一个可装4磅东西的背包。你可盗窃的商品有如下3件。为了让盗窃的商品价值最高,你该选择哪些商品? 商品名称 重量(磅) 价值(美元) 音响 4 3000 笔记本电脑 3 2000 吉他 1 1500 每个动态规划...

冷月无声的博客 1882
上一篇: 最长公共子序列问题--动态规划
下一篇: 冒泡排序算法
wenyixicodedog
博客等级 码龄8年 87粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值