最长公共子序列Python,最长公共子序列动态规划C语言

  最长公共子序列Python,最长公共子序列动态规划C语言

  以前这个问题总是和最长的常用部分列混淆,所以就背下来了。如果当前元素匹配,动态规划的变换方程可以满足dp[i][j]=1 dp[i-1][j-1],否则DP[I][J]=0;本题目动态编程创建的答案dp数组的大小取决于DP[str 1 . length((1)][str 2 . length]]和DP[str 1]的版本。长度]] [str2。长度】。

  算法1的思路。两个字符串分别由行和列组成二维矩阵。

  2.比较二维矩阵中每个点对应的矩阵字符是否相等。如果相等,则将值设置为1;否则,将其设置为0。

  3.通过查找值为1的最长对角线,可以找到最长的公共子串。

  和str2具有五个公共子列,但是最长的公共子列的长度为5。

  其实这是最容易理解的,因为做了就会计算出最长的对角线。这一步很麻烦,按照以下思路改进。

  二维矩阵元素的值从dp[i][j]=1转移到dp[i][j]=1 dp[i-1][j-1]。所以可以避免后期求对角线长度的操作。使用长度变量记录代码中的最大值。

  导入Java . util . *;public class main { publicstaticvoidmain(string[]args)scannerin=new scanner)system . in;字符串S1=in . next(;字符串S2=in . next(;char[]ch1=S1 . tochararray(;char[]CH2=S2 . tochararray(;int[][]DP=new int[ch1 . length][CH2 . length];int length=0;for(intI=0;i ch1.lengthI)for(intj=0;j ch2.lengthj()if)ch1[I]==CH2[j])if)i0j 0){ DP[I][j]=DP[I-1][j-1]1;} else { DP[I][j]=1;}Length=math.max(长度,DP[I][j];} else { DP[I][j]=0;}}system.out.println(长度);}个人认为初始化第一行的第一列最好放在两个for循环中。因为长度的更新是在for循环中,如果只有一个相同的字符,比如“a”和“abcef”,那么初始化语句就会出现在外面,长度不会更新为,最后的错误结果是0。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: