Python最长公共子串

【动态规划算法】【Python实现】最长公共子序列 阅读详情

Python最长公共子串

方法一

最简单最容易想到的方法,去数组第一个元素为最长公共前缀,如果是,就return,如果不是就减去最后一个单词。只到找到位置。

class Solution:
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        if len(strs) ==0:
            return ''
        prefix = strs[0]
        for i in range(1,len(strs)):
            while prefix != strs[i][0:len(prefix)]:
                prefix = prefix[0:len(prefix)-1]
                if prefix == '':
                    return ''
        return prefix

改进版:

class Solution:
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        
        if len(strs) == 0:
            return ""
        
        prefix = strs[0]

        for s in strs:
            while s.find(prefix) != 0:
                prefix = prefix[0:len(prefix) - 1]
                if prefix == "":
                    return prefix
        return prefix

方法二

从第一单词的第一个字母往后加,算法速度和前面差不多。

class Solution:
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        if len(strs)== 0:
            return ''
        prefix =''
        for i in range(len(strs[0])):
            prefix += strs[0][i]
            for x in strs:
                if x.find(prefix)!=0:
                    return prefix[0:len(prefix)-1]
        return prefix

方法三

分治法,于排序算法中归并排序的思想类似。

class Solution:
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        if len(strs) == 0:
            return ''
        return self.longest_prefix(strs, 0, len(strs)-1)

    def longest_prefix(self,strs, I, r):
        if I == r:
            return strs[I]
        else:
            mid = (I + r) // 2
            lcpL = self.longest_prefix(strs, I, mid)
            lcpR = self.longest_prefix(strs, mid + 1, r)
            return self.commonprefix(lcpL, lcpR)

    def commonprefix(self,lcpL, lcpR):
        Min = min(len(lcpL), len(lcpR))
        for i in range(Min):
            if lcpL[i] != lcpR[i]:
                return lcpL[0:i]
        return lcpL[0:Min]

第四种

二分法:



由此可以看出,二分法还是快的呀!!!

class Solution:
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        if len(strs) == 0:
            return ''
        Min = 2**32
        for i in strs:
            Min = min(Min,len(i))
        low, high = 1, Min
        while low <= high:
            mid = (low + high) //2
            if self.iscommonPrefix(strs,mid):
                low = mid + 1
            else:
                high = mid - 1

        return strs[0][0:(low+high)//2]

    def iscommonPrefix(self,strs,length):
        str1 = strs[0][0:length]
        for i in range(1,len(strs)):
            if strs[i].find(str1)!=0:
                return False
        return True
最长的公共连续子串Python #-*-coding:utf-8-*- import numpy as np from numpy import * # 牛牛有两个字符串(可能包含空格),牛牛想找出其中最长的公共连续子串,希望你能帮助他,并输出其长度。 # 动态规划问题,对于字符串a,b. # 1)先新建一个状态转移矩阵len(a)*len(b);2)初始化第一行、第一列;3)更新矩阵,matrix[i][j]=1+matrix... 阅读详情

相关推荐

牛客网NC127 最长公共子串python解析

描述 给定两个字符串str1和str2,输出两个字符串的最长公共子串 题目保证str1和str2的最长公共子串存在且唯一。 示例1 输入: "abc1234321ab",12 复制返回值: 7 解题思路: 动态规划: 思路一,dp[i][j]代表最大字符串长度,定义时建立为数字的矩阵,通过索引切片得出公共子串 dp[i][j]表示字符串str1中第i个字符和str2种第j个字符为最后一个元素所构成的最长公共子串。如果要求dp[i][j],也就是str1的第i个字符和str2的第j

m0_60968284的博客 322

python实现最长公共子串

介绍 子串和子序列的意思不一样,如下图所示,子序列不要求连续,只需要在给定序列中出现过,并且相对顺序一致。而子串需要连续。 图片来自动态规划 最长公共子序列 过程图解 最长公共子串: 同时出现在两个字符串中的最长子串 实现 使用动态规划的方法,递推公式如下: dp[i,j]dp[i, j]dp[i,j]表示以第iii个字符结尾的字符串xxx与以第jjj个字符结尾的字符串yyy之间的最长公共子串长度 dp[i,j]={0 若 i=0 或 j=0dp[i−1,j−1]+

ltochange的博客 9873

ORB-SLAM3复现的详细过程——配置安装及ROS和脚本运行---Ubuntu20.04

所提供的图像具有高动态范围,事先进行了光度标定,用20Hz的帧率采集,分辨率为1024像素*1024像素;需要下载数据集dataset-room1_512_16和rgbd_dataset_freiburg1_desk。在一键安装ROS后,只需要再安装Pangolin即可,其他所有的需要都已经存在。用微型飞行器采集的视觉惯性数据集,包含双目相机和IMU同步测量数据及位姿的真值。第二条命令中的${ROS_PACKAGE_PATH}是自己文件的路径。其采用的相机和IMU传感器,在硬件上进行了时间同步。

琉璃轻纱的博客 1万+

最长公共子串(Python)

Python解决最长公共子串

qq_40531593的博客 3707

强网杯Web题ezphp解题全记录:利用PHP反序列化与条件竞争拿下服务器

本文详细解析了强网杯Web题目ezphp的解题过程,通过PHP反序列化与条件竞争漏洞的组合利用,成功获取服务器权限。文章深入剖析了反序列化链的构造、文件上传绕过技巧以及条件竞争的实际应用,为CTF选手和Web安全研究者提供了宝贵的实战经验。

weixin_29006187的博客 375

ESWA投稿全流程避坑指南:从LaTeX模板到审稿状态查询(附最新资源链接)

本文提供了一份详尽的ESWA期刊投稿全流程指南,涵盖从LaTeX模板深度适配、Cover Letter撰写,到Editorial Manager系统操作、审稿状态解析等关键环节。重点解析了投稿准备中的常见“雷区”与文件合规性要求,并分享了收到审稿意见后的高效修改与回复策略,旨在帮助研究者规避流程陷阱,提升投稿效率与成功率。

9o8p7i6u5y的博客 838

【python】求最长连续公共子序列长度的几种解法

给定两个序列X和Y,返回最长连续的公共子序列长度。

weixin_43818123的博客 1986

生物信息学名词解释 | K-mer (长度为k的短序列)

K-mer 何谓K-mer 所谓Kmer,即为一段长度为k的DNA片段,是由测序reads剪切一部分得到的。k为一个奇数,k=几,就为几mer。 比如:我的测序reads长度为100bp,我将这100bp打断成17bp的短片段,打断后的17bp段片段就叫17mer,可以获得(100-17+1)条k-mer序列。 Table1 k-mers for GTAGAGCTGT. k k-mers 1 G,T,A,G,A,G,C,T,G,T 3 GTA,TAG,AGA,GAG,AGC,GCT,CT

qq_50637636的博客 2万+

威风博客:Java常用的判断

威风博客:Java常用的判断首先是字符串常用的工具类判断比较常用 今天来分析一下java的常用判段工具类 首先是字符串常用的工具类 indexOf String a = "abcdef"; System.out.println(a.indexOf("f"));//获取字符串的下标位置 输出结果就是 5 //查找指定字符是在字符串中的下标。在则返回所在字符串下标;不在则返回-1. toUpperCase String a = "abcdef"; String b = "ABCD";

半夏威风博客 427

(实战)[re:Invent 2018]-001:赛道分析-(致敬1024)

打印log

Rainbow 2778

静态分析工具COBOT与Testbed对比

Testbed为规则检查工具的代表,市场占有量非常大,但随着时间的推移,大家从规则匹配转向了用静态分析工具检查Bug,所以规则检查型工具占有量比开始时候已经减少,但仍有一些比较落后的单位还在继续采购此类工具。3、通过对开源工程的测试,进行误漏报率的对比,发现COBOT(库博)的误漏报率相比Testbed较低,因COBOT主打国内市场,在众多军工单位进行大量试用及使用,吸取了众多单位的意见和建议,更加符合国内军工单位的使用习惯及测试要求。4、此外库博在功能上还可以进行计划任务,检测队列,检测并发的功能支持。

chengoodflower的博客 2054

LCS(最长公共子串)和最长公共子串(DP) python3实现

一、LCS(最长公共子串)python实现 LCS问题就是求两个字符串最大相同的公共子串;我们现假设有两个字符串X,Y。其长度分别为m,n 我们从X,Y两个字符串的最后一个字符串开始看起 如果 Xm = Yn: LCS(X, Y) = LCS(Xm-1, Yn-1)+ "Xm" 如果Xm != Yn: LCS(X,Y) = max(LCS(Xm-1,Yn), LCS(Xm, Y...

永远飞翔的鸟 2251

【目标检测】基于yolov5的道路坑洼检测(附代码和数据集)

基于yolov5的道路坑洼检测(附代码和数据集)

学无止境、积少成多、厚积薄发 4620

LCS(最长公共子串) python3实现

LCS问题就是求两个字符串最大相同的公共子串;我们现假设有两个字符串X,Y。其长度分别为m,n 我们从X,Y两个字符串的最后一个字符串开始看起 如果 Xm = Yn: LCS(X, Y) = LCS(Xm-1, Yn-1)+ "Xm" 如果Xm != Yn: LCS(X,Y) = max(LCS(Xm-1,Yn), LCS(Xm, Yn-1)) 我们即构建了这样的动态转移方程。如果...

爱发呆的小小曹 3928

【MATLAB】工业传送带速度闭环控制与张力联合仿真

本文基于MATLAB/Simulink平台,构建了工业传送带速度闭环控制与张力联合仿真系统。通过搭建驱动模块、机械传动模块、检测模块和控制模块,实现了速度与张力的协同控制。采用双PID调节器分别整定速度与张力参数,经联合调试后系统性能良好:速度跟踪误差小于±0.03m/s,张力波动控制在±30N内,负载扰动恢复时间仅0.3秒。研究提供了从建模到参数优化的完整工程方案,可直接应用于课程设计或工业实践,有效解决了传送带运行中速度偏差与张力波动的协同控制难题。

unber的博客 76

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

python求最长公共子串_Python 寻找最长公共子串的简单示例

这篇文章主要为大家详细介绍了Python 寻找最长公共子串的简单示例,具有一定的参考价值,可以用来参考一下。感兴趣Python 寻找最长公共子串的简单示例的小伙伴,下面一起跟随512笔记的小编罗X来看看吧。# 512笔记网 (www.512pic.com)def find_lcp(s,t):lens = len(s)lent = len(t)if not lens or not lent:ret...

weixin_39768917的博客 990

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

python求两个字符串最长公共子串_python实现:求两个字符串的最长公共子串

假设s1 = 'abcdef' ,s2 = 'mcdea',建立一个(len(s1)+1) x (len(s2)+1)的数组,如下如所示的一个二维数组,代码的操作流程是:# -*- coding: utf-8 -*-"""Created on Thu Oct 4 16:25:35 2018@author: DELL"""'''求两个字符串的最长公共子串思想:建立一个二维数组,保存连续位相同与否...

weixin_39947351的博客 495

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

用Python实现查找两个字符串a,b中的最长公共子串

题目:用Python实现查找两个字符串str1、str2中的最长公共子串。 输入描述: 输入两个字符串 输出描述: 输出最长公共字符串。 示例1 输入 acbcbcef abcbced 输出 bcbce 题解方法一般有如下三种: 1、两个字符串str1、str2,从其中较短一个字符串截取由大到小的子串,和较长一个字符串匹配,依次循环查找。 #以其中较短的字符串,从长到短依次循环匹配查找 str1=input() str2=input() str1,str2=(str2,str1) i

weixin_42968460的博客 1万+

【动态规划】最长公共子序列和最长公共子串(python)

动态规划经典例题——最长公共子序列和最长公共子串(python) 很久之前大概是高中的时候写过这种题目,使用动态规划的方法求解的,现读研究生了,要把过去的拾起来的呢。 1. 最长公共子序列(LCS) 1.1 问题描述 1.2 思路 利用动态规划。 下一步就要找到状态之间的转换方程。 因此可以根据这个方程来进行填表,以"helloworld"和“loop”为例: 1.3 Python代码 d...

机器学习初学者必看,关注我,一起了解机器学习 4489

使用 python 实现动态规划之最长公共子串

这道题属于动态规划中十分经典的题目,在两个字符串中找到最长的公共子串,返回其最大长度或最大字符串。

TFATS的博客 1544

最长公共子串 和 最长公共子序列 的python算法实现

《算法图解》第9章 动态规划 后面给出了怎么求两个字符串的 最长公共字串 和 最长公共子序列 的算法思路。但是没有给出代码实现,这里根据其思路实现其算法python编程。 最长公共字串 为两个字符串a, b中相同的连续字符串的长度。 如 a=‘yhabcfdaefch’ , b=‘abcfaaegh’ 则a,b的最长公共子串为’abcf’ 思路如下: 代码如下: import numpy ...

fzl的博客 872

python最长公共连续子串_[Python]最长公共子序列 VS 最长公共子串[动态规划]

前言由于原微软开源的基于古老的perl语言的Rouge依赖环境实在难以搭建,遂跟着Rouge论文的描述自行实现。Rouge存在N、L、S、W、SU等几大子评估指标。在复现Rouge-L的函数时,便遇到了本博文的问题:求两串的最长公共子序列。一 参考文献全文参考均如下博文。二 最长公共子序列 & 最长公共子串的区别1、最长公共子序列(Longest Common Subsequence,LC...

weixin_39585378的博客 269

Python —— 查询两个字符串的最长公共子串

查询两个字符串的最长公共子串查询两个字符串的最长公共子串                 查询两个字符串的最长公共子串 思路: 1、通过字符串1从全长开始判断是否存在于字符串2中,如果不存在则迭代至只有1位字符 2、通过列表来保存结果,以免出现有多个同长的最长子串情况 3、选择长度短的字符串作为操作字符串,以提升效率 def getLongestSameStr(str1, str2): # 判断两个字符串长短,取短的那个

alun550的博客 1866

python输入两个字符串的输出它们公共的最长子串_python实现求两个字符串的最长公共子串方法...

python实现求两个字符串的最长公共子串方法如下所示:# coding:utf-8'''求两个字符串的最长公共子串思想:建立一个二维数组,保存连续位相同与否的状态'''def getNumofCommonSubstr(str1, str2):lstr1 = len(str1)lstr2 = len(str2)record = [[0 for i in range(lstr2+1)] for j ...

weixin_39906130的博客 1427

python-求两个字符串的连续最长公共子串

python-求两个字符串的连续最长公共子串求2个字符串的最长公共子串新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 求2个字符串的最长公共子串 最长公共子串(LCS,Longest Common Substring) 思

weixin_40795120的博客 1392
上一篇: 做一个Udp聊天室
下一篇: TCP简介
GhostintheCode
博客等级 码龄8年 53粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值