用动态规划策略求解最长公共子序列问题,最长公共子序列动态规划代码

  用动态规划策略求解最长公共子序列问题,最长公共子序列动态规划代码

  DP19最长公共子序列(I)

  描述两个字符串s1和s2,长度分别为n和m。求两个字符串的最长公共子序列的长度。

  所谓子序列,是指从一个字符串中删除部分字符(或不删除)而形成的字符串。例如,字符串“arcaea”的子序列是“ara”、“rcaa”等等。但是“汽车”和“aaae”不是它的子序列。

  s1和s2的最长公共子序列是最长字符串,它既是s1的子序列,也是s2的子序列。

  数据范围:确保字符串中的字符都是小写字母。

  需求:空间复杂度,时间复杂度

  高级:空间复杂性,时间复杂性

  描述:在第一行输入整数N和M,表示字符串s1和s2的长度。

  接下来,在第二行和第三行分别输入字符串s1和s2。

  输出描述:输出两个字符串的最长公共子序列的长度。

  示例1输入:

  5 6

  新款

  Bdcaaa复制

  输出:

  2份副本

  描述:

  最长的公共子序列是长度为2的“bc”或“bd”。示例2输入:

  3 3

  字母表

  Xyz复制

  输出:

  0问题求解动态规划求解步骤:

  定义dp[i][k]表示当字符串A和字符串B的长度分别为I和K时,初始化最长的子串长度:dp[0][k]=0,dp[i][0]=0,表示当一个字符串为0时,与另一个字符串最长匹配的子串长度为0。递归公式:若a[i-1] Dp[i][k]=dp[i-1][k-1] 1否则,Dp[i][k]等于max(dp[i][k-1],dp[i-1][k])代码如下:

  #包含位/标准数据。h

  int solve(const std:string a,const std:string b)

  {

  if (a.size()==0 b.size()==0)

  {

  返回0;

  }

  //dp[i][k]表示长度为I的A和长度为k的B之间的最长匹配数。

  STD:vector STD:vector int DP(a . size()1,std:vector int (b.size() 1,0));

  int len=0;

  for(int I=1;I=a . size();我)

  {

  for(int k=1;k=b . size();k)

  {

  if (a[i - 1]==b[k - 1])

  {

  DP[I][k]=DP[I-1][k-1]1;

  }

  其他

  {

  dp[i][k]=std:max(dp[i - 1][k],DP[I][k-1]);

  }

  }

  }

  return DP[a . size()][b . size()];

  }

  int main()

  {

  int m,n;

  STD:CIN m n;

  STD:string a;

  STD:string b;

  STD:CIN a b;

  std:cout solve(a,b)STD:endl;

  返回0;

  }

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

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: