热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

最长公共子序列python实现,最长回文子串动态规划python

最长公共子序列python实现,最长回文子串动态规划python1问题描述给定字符串S,

  最长公共子序列python实现,最长回文子串动态规划 python

  1问题描述给定字符串S,求S最长回文列的长度。

  根据2状态转移的思想,dp[i][j]表示从S[i]到S[j]表示的子串是否为回文子串,否则为1,否则为0。这样,根据S[i]是否等于S[j]就可以把转移情况分为两类。

  当S[i]==S[j]时,只要S[i 1]到S[j-1]是回文子串,那么S[i]到S[j]就是回文子串;恰恰相反。如果S[i]!=S[j],S[i]到S[j]一定不是回文子串。这样就可以写出状态转移方程。

  边界:dp[i][i]=1,dp[i][i 1]=(S[i]==S[i 1])?1 : 0。

  另外还需要注意的是,如果按照I和J从小到大的顺序枚举substring的两端,然后更新dp[i][j],并不能保证计算出dp[i 1][j-1],所以不会得到正确的dp[i][j]。解决方法是按照子串的长度和子串的初始位置进行枚举。由于边界的原因,它表示长度为1和2的子列,每个转换都会将子列的长度减少2。

  3558 www.sina.com/(时间复杂度可达o (n ^2)).

  # include CST dio # includecstringcOnsintmaxn=1010;char S[MAXN];int DP[MAXN][MAXN];int main())gets);intlen=Strlen(s)、ans=1;SMS (DP,0,sizeof)DP);初始化//的DP序列(inti=0;ilenI))/边界DP[I][I]=1;if(Ilen-1)if)s[I]==s[I1]){ DP[I][I 1]=1;ans=2;//初始化时注意当前最长回文子串的长度} }//状态转移方程for(INTL=3;L=lenl()/枚举(inti=0;I L-1 len;I )//枚举子串int j=il-1的开始端点;//子串的右端点if(s[I]==s[j]DP[i1][j-1]==1){ DP[I][j]=1;ans=L;//更新最长回文子串长度}}printf(%d\n ,ans);0;} 3除了动态规划法,还可以通过混合列来求解,降低时间复杂度。

  代码

  hash+二分的思路

  33558 www.Sina.com/# include iostream # include CST dio # include string # include vector # includealgorithmusingnamespace ttd tttd const LL MOD=1e 9 7;//MOD为计算混列值时的模量const LL P=1e7 19//P为计算混列值时的进制const LL MAXN=2e5 10//字符串的最大长度//powP[i]为P^i%MOD,H1和氘分别为潜艇用热中子反应堆(海底热反应堆的缩写)和rstr的混列值LL powP[MAXN]、H1[MAXN]、H2[MAXN];//初始化函数为powP函数void init(){ powP[0]=1;for(intI=1;IMAX ni){ powp[I]=(powp[I-1]* p)% MOD;} }//计算函数计算字符串潜艇用热中子反应堆(海底热反应堆的缩写)的混列值voidcalh(llh)、string str ) ) h(0)=str(0)。//H[0]单独处理for(inti=1;istr。长度(;I)h(I)=)h(I-1)* pstr)% MOD;}//calSingleSubH计算h[I.j]intcalsinglesubh[],int i,intj]{if(I==0)返回h[j];返回()h[j]-h[I-1]* powp[j-I1])% MOD MOD)% MOD;(//设对称点为我,字符串长度为莱恩,用[左,右]将回文半径一分为二)查找满足哈希尔==哈希尔的最后回文半径(/等效于查找满足条件的第一个哈斯尔!=哈希尔的回文半径,减少一即可//isEven集中的鸭子回文为0,求爱回文为1intbinarysearch(intleft,int right,int len,int i,int isEven)(while)))65//左半子串混杂值H1[H1L .H1R],右半子串值H2 [ h2l .h2r ] int h1l=I-midi seven)、INTH2L=Len-left-(Imid)、h2r=Len-left-(IIS even);intHashl=calsinglesubh(H1,H1L,H1R);intHashr=calsinglesubh(H2,H2L,H2R);如果(Hashl!=Hashr(right=mid;//哈希值各不相同,回文半径=mid else left=mid 1;//哈希值相等,回文半径mid } return left-1;//返回最大回文半径(} int main)){ init);字符串潜艇用热中子反应堆(submarine thermal reactor的缩写)获取线(CIN海峡);卡尔(H1海峡);恢复(str.begin)、str。end);//反转字符串并选择卡尔(H2海峡);int ans=0;//奇回文for(intI=0;istr。长度(;我()/二分钟上界在边界点我左右长度的小值上加上1intmaxlen=min(I,(int)str。长度)-1-I)1;intk=Binarysearch(0,maxLen,str.length),I,0);ans=max(ans,k * 2 ^ 1);//偶回文for(intI=0;istr。长度(;I ) ) /二分钟上界在边界点我左右长度的小值上加1 (注意左边的长度为i 1) intmaxlen=min(I1,(int)str。长度))-1-I)1;intk=Binarysearch(0,maxLen,str.length),I,1);ans=max(ans,k * 2);}printf(%d\n ,ans);返回0;}



推荐阅读
  • 在C++程序中,文档A的每一行包含一个结构体数据,其中某些字段可能包含不同数量的数字。需要将这些结构体数据逐行读取并存储到向量中,随后不仅在控制台上显示,还要输出到新创建的文档B中。希望得到指导,感谢! ... [详细]
  • 经过两天的努力,终于成功解决了半平面交模板题POJ3335的问题。原来是在`OnLeft`函数中漏掉了关键的等于号。通过这次训练,不仅加深了对半平面交算法的理解,还提升了调试和代码实现的能力。未来将继续深入研究计算几何的其他核心问题,进一步巩固和拓展相关知识。 ... [详细]
  • NOIP2000的单词接龙问题与常见的成语接龙游戏有异曲同工之妙。题目要求在给定的一组单词中,从指定的起始字母开始,构建最长的“单词链”。每个单词在链中最多可出现两次。本文将详细解析该题目的解法,并分享学习过程中的心得体会。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • Java中不同类型的常量池(字符串常量池、Class常量池和运行时常量池)的对比与关联分析
    在研究Java虚拟机的过程中,笔者发现存在多种类型的常量池,包括字符串常量池、Class常量池和运行时常量池。通过查阅CSDN、博客园等相关资料,对这些常量池的特性、用途及其相互关系进行了详细探讨。本文将深入分析这三种常量池的差异与联系,帮助读者更好地理解Java虚拟机的内部机制。 ... [详细]
  • Python 序列图分割与可视化编程入门教程
    本文介绍了如何使用 Python 进行序列图的快速分割与可视化。通过一个实际案例,详细展示了从需求分析到代码实现的全过程。具体包括如何读取序列图数据、应用分割算法以及利用可视化库生成直观的图表,帮助非编程背景的用户也能轻松上手。 ... [详细]
  • Spring框架中枚举参数的正确使用方法与技巧
    本文详细阐述了在Spring Boot框架中正确使用枚举参数的方法与技巧,旨在帮助开发者更高效地掌握和应用枚举类型的数据传递,适合对Spring Boot感兴趣的读者深入学习。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • 本文详细介绍了 Java 中遍历 Map 对象的几种常见方法及其应用场景。首先,通过 `entrySet` 方法结合增强型 for 循环进行遍历是最常用的方式,适用于需要同时访问键和值的场景。此外,还探讨了使用 `keySet` 和 `values` 方法分别遍历键和值的技巧,以及使用迭代器(Iterator)进行更灵活的遍历操作。每种方法都附有示例代码和具体的应用实例,帮助开发者更好地理解和选择合适的遍历策略。 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • 题目要求维护一个数列,并支持两种操作:一是查询操作,语法为QL,用于查询数列末尾L个数中的最大值;二是更新操作,用于修改数列中的某个元素。本文通过ST表(Sparse Table)优化查询效率,确保在O(1)时间内完成查询,同时保持较低的预处理时间复杂度。 ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • 本文深入解析了 Kuangbin 数学训练营中的经典问题——Ekka Dokka,并通过详细的代码示例和数学推导,探讨了该问题的多种解法及其应用场景。通过对算法的优化和扩展,本文旨在为读者提供全面的理解和实用的参考。 ... [详细]
  • 如何利用Java 5 Executor框架高效构建和管理线程池
    Java 5 引入了 Executor 框架,为开发人员提供了一种高效管理和构建线程池的方法。该框架通过将任务提交与任务执行分离,简化了多线程编程的复杂性。利用 Executor 框架,开发人员可以更灵活地控制线程的创建、分配和管理,从而提高服务器端应用的性能和响应能力。此外,该框架还提供了多种线程池实现,如固定线程池、缓存线程池和单线程池,以适应不同的应用场景和需求。 ... [详细]
  • Java学习第10天:深入理解Map接口及其应用 ... [详细]
author-avatar
Jackson-過時間
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有