当前位置: 首页 > news >正文

最长公共子序列求长度和输出子序列C代码

求两个字符串的公共子序列我们都知道需要使用用动态规划思想

用res[i][j]表示截止到字符串A的第i个字符串和截止到字符串B的第j个字符的最长公共子序列。如两个字符串helloworld和loop,res[5][3]表示子串hello和子串loo的最长公共子序列,为lo,长度为2

状态转移方程

当i=0或j=0时,res[i][j]=0

当A[i]=B[j]时,res[i][j]= res[i-1][j-1]+1

当A[i]≠B[j]时,res[i][j]= max(res[i][j-1], res[i-1][j])

但是这样只能算出来最长公共子序列的长度,如果需要输出子序列的话需要用回溯的方法,比较难。我们可以用一个三维字符型数组来做动态规划数组,这样既能得到实际的公共子序列,也能得到长度

定义变量

char s1[105];
char s2[105];
char dp[105][105][105]; // 使用三维dp数组

 具体实现

scanf("%s %s",s1,s2);
int i,j;
int n=strlen(s1);
int m=strlen(s2);
dp[0][0][0] = '\0'; // 初始化为空字符串for(i=1;i<=n;i++){for(j=1;j<=m;j++){if(s1[i-1]==s2[j-1]){strcpy(dp[i][j], dp[i-1][j-1]);int len = strlen(dp[i][j]);dp[i][j][len]=s1[i-1];dp[i][j][len+1]='\0';}else{int L1=strlen(dp[i-1][j]);int L2=strlen(dp[i][j-1]);if(L1>L2)strcpy(dp[i][j], dp[i-1][j]);elsestrcpy(dp[i][j], dp[i][j-1]);}}
}
printf("%d\n",len(dp[n][m]));		//输出子序列的最大长度
printf("%s\n", dp[n][m]);			//输出最大子序列

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 大数的排列组合公式C代码
  • 08_排序
  • 云原生之容器编排实践-OpenEuler23.09在线安装Kubernetes与KubeSphere
  • uni-app怎样使用组件
  • vue.js微商城后台管理系统
  • web学习笔记(八十)
  • FreeRTOS——事件标志组
  • 探索ChatGPT是如何改变癌症护理
  • 刷题——在二叉树中找到最近公共祖先
  • adb不插usb线通过wifi调试
  • macOS查看系统日志的方法
  • .NET 漏洞分析 | 某ERP系统存在SQL注入
  • uniapp实现一个键盘功能
  • Vue表单输入绑定v-model
  • 麒麟系统部署JeecgBoot
  • 「面试题」如何实现一个圣杯布局?
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • HashMap ConcurrentHashMap
  • Java基本数据类型之Number
  • JS 面试题总结
  • Linux各目录及每个目录的详细介绍
  • mongo索引构建
  • uni-app项目数字滚动
  • yii2中session跨域名的问题
  • 成为一名优秀的Developer的书单
  • ------- 计算机网络基础
  • 推荐一个React的管理后台框架
  • 一个JAVA程序员成长之路分享
  • 正则表达式
  • nb
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 容器镜像
  • ​520就是要宠粉,你的心头书我买单
  • ​Spring Boot 分片上传文件
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​水经微图Web1.5.0版即将上线
  • # 数据结构
  • #APPINVENTOR学习记录
  • #DBA杂记1
  • #php的pecl工具#
  • #pragam once 和 #ifndef 预编译头
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (苍穹外卖)day03菜品管理
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .form文件_一篇文章学会文件上传
  • .NET Core 2.1路线图
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .net core 依赖注入的基本用发
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET Micro Framework 4.2 beta 源码探析
  • .Net 访问电子邮箱-LumiSoft.Net,好用