博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最长公共子序列Lcs(打印路径)
阅读量:6363 次
发布时间:2019-06-23

本文共 1152 字,大约阅读时间需要 3 分钟。

给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。
 
比如两个串为:
 
abcicba
abdkscab
 
ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。
Input
第1行:字符串A第2行:字符串B(A,B的长度 <= 1000)
Output
输出最长的子序列,如果有多个,随意输出1个。
Input示例
abcicbaabdkscab
Output示例
abca
#include 
using namespace std;char a[1010],b[1010];int dp[1010][1010];string str="";int path[1010][1010];//打印路径用,表示(i,j)节点是由那种状态转移过来的void Lcs(int i,int j){ if(i==0||j==0){ return; } if(path[i][j]==1){ Lcs(i-1,j-1); printf("%c",a[i-1]); }else if(path[i][j]==2){ Lcs(i-1,j); }else{ Lcs(i,j-1); } return ;}int main(){ // freopen("in.txt","r",stdin); scanf("%s%s",a,b); for(int i=1;i<=strlen(a);i++){ for(int j=1;j<=strlen(b);j++){ if(a[i-1]==b[j-1]){ dp[i][j]=dp[i-1][j-1]+1; path[i][j]=1; }else if(dp[i-1][j]>dp[i][j-1]){ dp[i][j]=dp[i-1][j]; path[i][j]=2; }else{ dp[i][j]=dp[i][j-1]; path[i][j]=3; } } } // cout<
<

 

转载于:https://www.cnblogs.com/wuwangchuxin0924/p/6648506.html

你可能感兴趣的文章
Scaffold-DbContext
查看>>
关于VMware Workstation主机列表问题求教
查看>>
配置管理小报101021:给ubuntu加监控
查看>>
qml文字滚动效果的封装,实现方式运用的qml中提供的动画效果,另一种实现方式也可以使用定时器修改控件的坐标来实现...
查看>>
标准C++实现任务队列
查看>>
jdbc url
查看>>
刷leetcode第704题-二分查找
查看>>
debug_backtrace() 函数生成一个 backtrace(追踪)
查看>>
第七天,还是盒子
查看>>
XAMPP软件包下载
查看>>
XXL-JOB初体验-ORACLE版
查看>>
沉思录:别人的棺材
查看>>
jersey + spring + mybatis + redis项目搭建
查看>>
PAT 1006 部分正确_另一种解法
查看>>
在Keil环境下使用JLink实现printf输出重定向至debug窗口
查看>>
JFreeChart生成3D饼图
查看>>
postgres的\d命令不显示全部的用户表
查看>>
poj 3468 A Simple Problem with Integers
查看>>
OOA/OOD/OOP细讲
查看>>
Tomcat 系统架构与设计模式_ 设计模式分析
查看>>