Q:有两个序列x,y。其中x={x1,x2…xm},y={y1,y2…yn}。寻找x与y的最长公共子序列。

注:子序列和子串有区别,字串是连续的,而子序列可间断。

呃(⊙﹏⊙),后面的暂时没时间写了,先挂代码吧……

#include <iostream>
#include<string>
#include<vector>
using namespace std;
struct TLCS
{int l;//表示该点代表的问题的最长子序列的长char from;//左:'l',上:'u',左上:'e'TLCS() :l(0) {}//初始化l为0
};
int main()
{string s1, s2;cin >> s1;cin >> s2;int m = s1.size();int n = s2.length();char* x = new char[m + 1];//x[1]~x[m]用于存储x1~xm,x[0]不用char* y = new char[n + 1];//y同理,y[0]空着//通过字符串赋值for (int i1 = 1; i1 < m + 1; i1++)x[i1] = s1.at(i1 - 1);for (int j1 = 1; j1 < n + 1; j1++)y[j1] = s2.at(j1 - 1);TLCS** LCS = new TLCS * [m + 1];for (int k = 0; k <= m ; k++)LCS[k] = new TLCS[n + 1];for (int i = 1; i <= m; i++){for (int j = 1; j <= n; j++){if (x[i] == y[j]){LCS[i][j].l = LCS[i - 1][j - 1].l + 1;LCS[i][j].from = 'e';}else{int l1 = LCS[i][j - 1].l;int l2 = LCS[i - 1][j].l;if (l1 > l2){LCS[i][j].l = l1;LCS[i][j].from = 'l';}else{LCS[i][j].l = l2;LCS[i][j].from = 'u';}}}}//构造解:将最长公共子序列放入一个向量vector<char> v;int i2 = m; int j2 = n;while (i2 > 0 && j2 > 0){switch (LCS[i2][j2].from){case'e':v.push_back(x[i2]); i2--; j2--; break;case'l':j2--; break;default:i2--; break;}}//打印最长公共子序列(向量反向)for (int i3 = v.size() - 1; i3 >= 0; i3--)cout << v[i3];//释放内存for (int i4 = 0; i4 <= m; i4++)delete[] LCS[i4];delete[] LCS;delete[] x;delete[] y;return 0;
}

如果有看不明白或者好的建议,欢迎探讨。

如果帮到你了,点赞评论鼓励下萌新吧~贴贴

DP方法(动态规划) 寻找最长公共子序列 LCS问题(c++)相关推荐

  1. 动态规划解最长公共子序列(LCS)(附详细填表过程)

    目录 相关概念 子序列形式化定义: 公共子序列定义: 最长公共子序列(以下简称LCS): 方法 蛮力法求解最长公共子序列: 动态规划求解最长公共子序列: 分析规律: 做法: 伪代码: 下面演示下c数组 ...

  2. 动态规划之最长公共子序列(LCS)

    最长公共子序列(LCS,Longest Common Subsequence).其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最 ...

  3. javascript写算法(一) 动态规划:最长公共子序列

    csdn是疯了吗,右下角的广告是一个人站在猪屁股后面打它...看了一下居然是baidu算出来的广告嵌在了iframe里,fixed to viewport,真是够了.最近还频频出现的广告是一个光头男子 ...

  4. 动态规划算法解最长公共子序列LCS问题

    动态规划算法解LCS问题 作者 July 二零一零年十二月三十一日 本文参考:微软面试100题系列V0.1版第19.56题.算法导论.维基百科. 第一部分.什么是动态规划算法 ok,咱们先来了解下什么 ...

  5. 最长公共子序列php,动态规划(最长公共子序列LCS)

    概念 求解决策过程最优化的结果 (可能有多个) 把多阶段过程转化为一系列单阶段过程,利用各阶段之间的关系,逐个求解 计算过程中会把结果都记录下,最终结果在记录中找到. 举例 求两个字符串的最长公共子序 ...

  6. 算法导论-----最长公共子序列LCS(动态规划)

    目录 一.概念梳理 二.最长公共子序列解决方案 方案1:蛮力搜索策略 方案2:动态规划策略 三.C代码实现 实现1 实现2(空间优化) 一.概念梳理   1. 子序列(subsequence): 一个 ...

  7. 动态规划解决最长公共子序列

    动态规划解决最长公共子序列 问题描述 给定两个序列,例如 X = "ABCBDAB".Y = "BDCABA",求它们的最长公共子序列的长度. 递归关系 c[i ...

  8. [dp]leetcode1143:最长公共子序列LCS (medium)

    题目: 题解: 动态规划的经典例题,可参考晴神的算法笔记 首先先使用暴力法思考吧,设t1和t2的长度分别为m和n,那么对两个字符串中的每个字符,分别只有选和不选两个决策,而得到两个子序列后,比较两个子 ...

  9. 动态规划问题——最长公共子序列问题

    题目: 给定两个字符串 str1 和 str2 ,返回两个字符串的最长公共子序列. 举例: str1 = "1A2C3D4B56"  str2 = "B1D23CA45B ...

最新文章

  1. Structure-from-Motion Revisited
  2. 【Android 逆向】arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 分析 malloc 函数的 arm 汇编语言 )
  3. 用Java将文件读入字节数组的7个示例
  4. 3 万字 51 张图教你 CPU、内存、操作系统硬核知识!
  5. python处理pdf文档_pyPdf - 用Python方便的处理PDF文档
  6. eBay和PayPal公布分拆细节:双方还将紧密合作。
  7. 【NOI OpenJudge】【1.3】编程基础之算术表达式与顺序执行
  8. Python 3 从入门到精通 Mac OS
  9. 神仙打架?苹果短暂撤销 Facebook 和 Google 的企业证书
  10. mac软件下载常用经典网站
  11. ◆谷歌热榜|百度中文搜索风云榜|Top 50
  12. mysql proxy maxscale_MaxScale: 一个用于解决MySQL扩展性的新工具(译)
  13. ssl申请证书的步骤是如何的呢?
  14. accesskey属性:激活元素快捷键(Alt+)
  15. c语言编程自幂数,【C语言基础】-自幂数优化-这个算法快得像一道闪电
  16. 计算机静音图标无法更改怎么办,电脑声音图标有红叉怎么办?教您解决方法
  17. 数据技术初学者不用再东搜西找了,一篇文章解读20个最新数据技术概念
  18. 云计算课程笔记10089
  19. 基于AI视觉技术构建柔性生产数字化车间
  20. 作文 我眼中的计算机1000字,你眼中的我作文1000字

热门文章

  1. 成都金堂计算机学校有哪些?
  2. Oracle使用shutdown命令后长时间无反应
  3. android remoteviews view,Android 理解RemoteViews
  4. 手机html input打开数字,html5 input的type属性启动数字输入法
  5. java中微信公众号框架_java微信公众号开发框架包含哪些内容呢?为什么要使用框架...
  6. 考研政治80+经验:政治86分教你怎么复习
  7. 基于java的教学管理系统设计(含源文件)
  8. uboot启动之BL2阶段的分析1:宏观分析
  9. Leetcode 跳跃游戏
  10. 01:高斯噪声和椒盐噪声