最长公共子串问题

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)后缀:后缀是指从 阅读详情

最长公共子串问题

给出两个字符串,求这两个字符串的公共子串。(还有一个类似的问题是两字符串的公共子序列,有待分析)。
例子:

INPUT:
abcdefg
gdefacd

OUTPUT:
def

动态规划法

使用动态规划法,相当于用空间换时间。
将一个复杂的大问题,分解为较为简单的子问题,最重要的步骤就是推导状态转移公式。
现有两个字符串,X=(x1, x2, …, xm), Y=(y1, y2, …, yn)
dp[i][j]代表以x[i-1]字符为结尾和以y[j-1]字符为结尾的公共子串长度。(注意!此设定是子串的结尾必须是x[i-1]和y[j-1])。容易推导,当x[i-1] == y[j-1]时,dp[i][j] = dp[i-1][j-1] + 1,否则,dp[i][j]=0。因为假如x[i-1]字符和y[j-1]字符不相等的话,以x[i-1]字符为结尾和以y[j-1]字符为结尾的公共子串就不存在,长度为0;假如相等,最短长度也为1,若之前还存在长为L的公共子串,那么长度就为L+1。
所以状态转移公式为:
if x[i-1] == y[j-1]:
dp[i][j] = dp[i-1][j-1] + 1
if x[i-1]!=y[j-1]:
dp[i][j] = 0

python代码:

def findLongestSubString(s1, s2):
    m = len(s1)
    n = len(s2)
    dp = [[0 for i in range(n + 1)] for i in range(m + 1)]
    mmax = 0
    start = -1
    for i in range(1, m+1):
        for j in range(1, n+1):
            if s1[i-1] == s2[j-1]:
                dp[i][j] = dp[i-1][j-1] + 1
                if dp[i][j] > mmax:
                    mmax = dp[i][j]
                    start = i - mmax
    return s1[start:start+mmax]
最长公共子串问题的后缀数组解法 二分枚举答案A,假设N个串可以有长度为A的公共字串,并对A的可行性进行验证。如果验证A可行,A'(A' 于是问题就集中到了,如何验证给定的长度A是否为可行解。方法是,找出在Height数组中找出连续的一段Height[i..j],使得i=A,并且i-1 具体查找i..j时,可以先从前到后枚举i的位置,如果发现Height[i]>=A,则开始从i向后枚举j的位置,直到找到了Height[j+1] 阅读详情

相关推荐

输入两个字符串,求它们最长公共字串的长度

输入两个字符串, 求它们最长公共字串的长度

最长公共子串与最长公共子序列问题

题目:1、最长公共子串问题(子串:连续的字符串)str ="abcde",“ab”"cd"都为子串2、最长公共子序列问题(子序列:保证相对顺序即可)str="abcde","ac" ,"ae"都为子序列。在概念上可以说,子串是特殊的子序列。假定有字符串str A , lenA = n, str B , lenB =m;解法:两个题目都是动态规划问题。最长子串的问题,因为是子串是连续的。dp[i][...

qq_34650169的博客 291

解决usbisp不识别无法烧录Atmega328P,Arduino不识别问题

如果使用Arduino IDE里面的烧录,可能会遇到一个问题,就是不识别国产这种廉价的USBISP 点击烧录引导程序,会遭遇到找不到USB设备的问题,选哪个都会提示找不到,比如选择USBasp could not find USB device with vid=0x16c0 pid=0x5dc vendor='www.fischl.de' product='USBasp' 因此,我们需要使用到progisp这一个软件的1.72版本 选择好芯片的型号后,调用编译好的HEX文...

arenascat的博客 7436

最长公共子串,出去重复子串

1.给定字符串A和B,输出A和B中的最大公共子串.     比如A = "aocdfe", B = "pmcdfa" 则输出"cdf" 2.实现一个程序,从键盘输入两个字符串,连接两个字符串,并去掉其重复子串,输入的字符串中只能是字符和空格,字符串以空格进行分割.   例:输入两个字符串如下:   "what is your name"   "my name is bourne"

tianmo2010的专栏 1535

TikTok Shop API密钥获取与PHP实战对接指南

本文详细介绍了TikTok Shop API密钥的获取流程与PHP实战对接方法。从开发者后台创建应用、获取核心的API密钥开始,逐步解析OAuth 2.0授权机制,并提供了完整的PHP封装类示例,涵盖签名生成、API调用、令牌刷新及错误处理,帮助开发者快速实现与TikTok Shop的数据对接与自动化操作。

weixin_29300241的博客 401

PAM4信号测试实战:从眼图分析到误码率测量的技术演进

在高速数字系统设计中,信号完整性测试是确保数据传输可靠性的核心环节。其基本原理在于通过时域和频域分析,精确评估信号在传输过程中的质量衰减与失真。随着数据速率向56Gbps及以上演进,传统的NRZ编码面临带宽瓶颈,而PAM4调制技术通过在每个符号周期内承载更多比特信息,成为提升信道效率的关键路径。这项技术的工程价值在于,它允许在相同带宽下实现翻倍的数据吞吐量,这对于数据中心互联、PCIe 6.0及800G以太网等高速接口至关重要。然而,PAM4信号电平间距更小,对噪声和抖动极为敏感,导致其原始误码率显著升高,

weixin_42522817的博客 657

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

问题描述: 说明:求解两个字符串的最长公共子字符串,必须连续 动态规划求解步骤 Step 1: 分析最优解的性质,刻画其结构特征 Step 2: 递归地定义最优解 仅当X[i]=Y[j]时,d[i,j]=d[i-1,j-1]+1;即当且仅当字符串X[i]=Y[j]时 X[i],Y[j]的最长公共子字符串长度d[i,j] 在 X[i-1],Y[j-1]的最长公共子序列长度d...

清风拂面 1068

智能驾驶小白必看:MEB低速紧急制动系统的工作原理与传感器配置详解

本文深入解析了MEB低速紧急制动系统的工作原理与传感器配置。该系统作为智能驾驶的关键安全冗余,专为应对停车场、拥堵路段等复杂低速场景设计。文章详细拆解了其如何通过超声波雷达、环视摄像头等传感器融合感知环境,并基于碰撞时间(TTC)等模型进行风险评估与分级制动,最终实现主动防碰撞,是智能驾驶技术实用化的重要体现。

c2d3e4f的博客 1131

leetcode-牛客网-NC127 最长公共子串-连续的子串

一、题目 二、思路 1、求的的是两个字符串的公共子串,子串是连续的 2、构建二维动态数组,记录最长的子串,都初始化为0 3、当两个字符相等时,dp[i][j]=dp[i-1][j-1]+1; 4、实时比较最长的子串,记录子串的最后一位的下标 三、代码 class Solution { public: /** * longest common substring * @param str1 string字符串 the string * @param str2 strin

weixin_45794299的博客 408

【知识点总结】电路原理 第一讲

大家好,从今天起,我将开始更新自上大学以来所学到的各种知识,之所以选择更新它们是因为最近我一直在收拾整理自己自上大学以来所收获到的各种知识,看着那厚厚一沓的书本心里不由得犯愁。如果我想找到特定的知识,那岂不是得翻到猴年马月。俗话说得好,下雨天打鞋子,闲着也是闲着,为此我设置一个专栏,将知识点一一分类总结,目的在于更好的整理所学的知识。本人学艺不精,有一些知识点地方可能存在瑕疵,希望各位大佬可以多多指教。以下是本篇文章正文内容虚断:一般通用性运算放大器的正反向输入端之间的电阻非常非常的大。

weixin_51130221的博客 4万+

CMCC-IPC-A410串口刷机救砖教程

《CMCC-IPC-A410摄像头串口刷机指南》摘要 本指南针对2018年前老款CMCC-IPC-A410摄像头变砖/升级失败的情况,提供串口刷机方案。需准备CH340G串口模块、杜邦线、海康V5.5.82固件等工具。操作包含硬件连接(TX/RX交叉接线)、115200波特率终端配置、CTRL+U进入刷机模式,通过UPF格式化、tftp传输固件、update写入等步骤完成修复。刷机后设备恢复未激活状态,需重置密码,原定制功能可能失效。整个过程需稳定供电,耗时约15-20分钟,注意此操作将使原厂保修失效。(1

海康威视技术支持 1845

剑指offer-例题 栈的压入、弹出序列

题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) import java.util.ArrayList; import java.util.Stack; public class Solution { public boolean I

qq_39622795的博客 905

TC3XX - MCAL知识点(三十九):AURIX™ TC3xx 的EDSADC实现旋变解码功能(应用笔记记录)

本文总结了英飞凌应用笔记中关于EDSADC旋变解码系统的关键内容。系统通过调幅解调获取电机位置和速度信号,支持内外载波生成方案,其中内部载波方案更常用(需2个DSADC通道)。重点介绍了滤波器链配置建议(避免FIR1)、系统条件要求(如偶数积分周期)以及群延迟计算方法。特别分析了SDCAP功能对硬件延迟的补偿机制,指出温度等因素可能导致外部电路延迟变化,需通过计数器测量并通过软件调整积分器起始点来消除角度误差。文中还提供了不同硬件延迟情况下的信号处理示例。

梦想技术家 459

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

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

m0_74496615的博客 2529

【WLAN】【基础知识】WIFI那些事儿之信道和频谱(涵盖2.4G、5G、6G,全网最全)

- 从事WIFI相关开发或测试工作,经常要和信道、频宽、频率等打交道,本文仅将平时涉及的2.4G、5G、6G的信道、频宽、频率等做一总结。 - 一图胜万言,本文汇总了工作中经常用到的频谱图,保证全网最全!!! - 本博客地址,https://blog.youkuaiyun.com/qxhgd,欢迎各位关注,转发请注明出处。

一介草民,只为生活。 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

最长公共子串(连续)问题

动态规划有一个经典问题是最长公共子序列,但是这里的子序列不要求连续,如果要求序列是连续的,我们叫公共子串,那应该如何得到这个串呢? 最简单的方法就是依次比较,以某个串为母串,然后生成另一个串的所有长度的子串,依次去母串中比较查找,这里可以采用先从最长的子串开始,减少比较次数,但是复杂度依然很高! 然后重新看一下这个问题,我们建立一个比较矩阵来比较两个字符串str1和str2

2万+

jre9下载 jdk9

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

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

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

m0_62793538的博客 1412

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

DP(最长公共子串问题)

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

ACM 1070

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

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

NickHan_cs的博客 946

最长公共子串问题——矩阵法求解

最大公共子串长度问题就是: 求两个串的所有子串中能够匹配上的最大长度是多少。 比如:"abcdkkk" 和 "baabcdadabc", 可以找到的最长的公共子串是"abcd",所以最大公共子串长度为4。 『算法思路』 1、把两个字符串分别以行和列组成一个二维矩阵。 2、比较二维矩阵中每个点对应行列字符中否相等,相等的话值设置为1,否则设置为0。 3、通过查找出值为1的最长对角线...

Miserable_ccf的博客 1610
上一篇: 矩阵分析复习
下一篇: sklearn.feature_extraction.text.TfidfVectorizer用法
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值