一:题目

给定两个长度分别为N和M的字符串A和B,求既是A的子序列又是B的子序列的字符串长度最长是多少。

输入格式:
第一行包含两个整数N和M。1≤N,M≤1000

第二行包含一个长度为N的字符串,表示字符串A。

第三行包含一个长度为M的字符串,表示字符串B。

字符串均由小写字母构成。

输出格式:
输出一个整数,表示最大长度。

输入样例:

4 5
acbd
abcbd

输出样例:

4

二:思路

区分:最长公共子序列和最长公共子串
举例:str1:abcd; str2:abecd
最长公共子序列: abcd
最长公共子串:ab

思路:思路来源于 《算法图解》 一书,主要是将问题转化成方格的形式(可以用二维数组进行表示)
横纵分别为两个字符串 那么在比较的时候,
如果两个字符相同,则将其所对应的坐标所代表的值为 左上方坐标的值加一
如果两个字符不相同,则选择其上方和左方中最大的值来代表

三:上码

/*区分:最长公共子序列和最长公共子串举例:str1:abcd;  str2:abecd 最长公共子序列: abcd最长公共子串:ab 思路:思路来源于 《算法图解》 一书,主要是将问题转化成方格的形式(可以用二维数组进行表示)横纵分别为两个字符串 那么在比较的时候,如果两个字符相同,则将其所对应的坐标所代表的值为  左上方坐标的值加一如果两个字符不相同,则选择其上方和左方中最大的值来代表
*/#include<bits/stdc++.h>
using namespace std;int main(){int N,M;string str1,str2;cin >> N >> M;cin >> str1 >> str2;int m[N+1][M+1];for(int i = 0; i < N + 1; i++){for(int j = 0; j < M + 1; j++){m[i][j] = 0;}}//   cout << m[0][0];for(int i = 0; i < N; i++){for(int j = 0; j < M; j++){//如果该两个字符相等 那么的话 该坐标对应的值为左上方的值加一 if(str1[i] == str2[j] ){m[i+1][j+1] = m[i][j] + 1;}else{//如果不相等那么就选择左方(行不变,列减一)或者上方(行减一,列不变 )中较大的值 m[i+1][j+1] = m[i+1][j] > m[i][j+1] ? m[i+1][j] : m[i][j+1]; }        }}//网格中的最后位置为 公共子序列的长度 cout << m[N][M];}//4 4
//fosh
//fish

7-2 最长公共子序列 (10 分)(思路加详解)相关推荐

  1. 7-3 棋盘覆盖 (10 分)(思路加详解)Come baby

    一:题目: 输入格式: 输入三个数,分别是aa,bb,length. 输出格式: 输出整个棋盘.其中特殊方格填为0,然后铺棋盘的顺序为:先铺四个子棋盘交界的部分,然后递归的对每个子棋盘按照左上,右上, ...

  2. 7-5 排列的字典序问题 (10 分)(思路加详解全排列问题+vector容器做法)Come Baby!

    一:题目 n个元素 {1,2, -,n} 有n!个不同的排列.将这 n! 个排列按字典序排列, 并编号为 0,1,-,n!-1 .每个排列的编号为其字典序值.例如,当n=3时,6个不同排列的字典序值如 ...

  3. 最长公共子序列LCS(动态规划)—详解

    一.基本概念 1. 子序列(subsequence): 一个特定序列的子序列就是将给定序列中零个或多个元素去掉后得到的结果(不改变元素间相对次序).例如序列<A,B,C,B,D,A,B>& ...

  4. 7-53 两个有序序列的中位数 (25 分)(思路加详解)用STL容器中的set容器的自动去重过不去

    一:题目 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A 0 ​ ,A 1 ​ ,⋯,A N−1 ​ 的中位数指A (N−1)/2 ​ 的值,即第⌊(N+1)/ ...

  5. 7-2 一元多项式的乘法与加法运算 (20 分)(思路加详解+map做法)map真香啊 各个测试点的用例子 来吧宝贝!

    一:题目 设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以 ...

  6. 7-3 树的同构 (25 分)(思路加详解)来呀baby!!!!!!!!

    一:题目 7-3 树的同构 (25 分) 给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是"同构"的.例如图1给出的两棵树就是同构的,因为我们把 ...

  7. 7-52 两个有序链表序列的交集 (20 分)(思路加详解尾插法)come Boby!

    一:题目 已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3. 输入格式: 输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列) ...

  8. 7-44 基于词频的文件相似度 (30 分)(思路加详解+set容器简便做法)兄弟们冲呀呀呀呀呀 今天你AC了吗

    一:题目 实现一种简单原始的文件相似度计算,即以两文件的公共词汇占总词汇的比例来定义相似度.为简化问题,这里不考虑中文(因为分词太难了),只考虑长度不小于3.且不超过10的英文单词,长度超过10的只考 ...

  9. 7-1 寻找大富翁 (25 分)(思路加详解+两种做法(一种优先队列,一种vector容器))

    一:题目 胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁. 输入格式: 输入首先给出两个正整数N(≤1 ...

最新文章

  1. JAVA NIO之Direct Buffer 与 Heap Buffer的区别?
  2. 室内主题元素分析图_主题乐园包装——“树”造型案例精选分享
  3. nginx反向代理配置
  4. 量产之后计算机读不出u盘,求大神、我量产没成功然后U盘就电脑上就不显示了...
  5. eclipse 使用 maven 无法编译 jsp 文件的问题
  6. java网上商城外文翻译_英语文献翻译网上商城java.doc
  7. ClickHouse安装与引擎
  8. matlab 正则化表达式_MatLab归一化(正则化)函数
  9. 没有基础学习java编程,去培训机构怎么样?
  10. Spring Boot 中yml文件小图标不正确解决方案
  11. 创业者必知的互联网思维之屌丝思维
  12. 刷脸支付青蛙Pro打通微信卡包小程序
  13. KMP算法求循环节,为什么能求循环节
  14. 我爱赚钱吧:学生都可以做的兼职工作
  15. 网络应用发布到linux上的web服务器上页面上显示麻将牌式字符的问题
  16. 华为mstp配置实例
  17. “路漫漫其修远兮,吾将上下而求索”,方向、方向、方向在哪里?
  18. Delete数据如何恢复
  19. Qt QLocalSocket 进程间通信
  20. 我的自制h1940红外遥控增强器(含软件及硬件制作方法)

热门文章

  1. 腾讯、百度、小米等7家互联网各大厂的中台建设怎么样了?
  2. 一名全栈工程师的必备“百宝箱”
  3. React-引领未来的用户界面开发框架-读书笔记(二)
  4. 用VBA得到EXCEL表格中的行数和列数
  5. Android之BaseQuickAdapter.setOnItemChildClickListener点击死人也没反应的原因
  6. C和指针之联合体大小
  7. linux网络编程之SCTP套接字常用接口
  8. Android之用Intent.FLAG_ACTIVITY_CLEAR_TOP解决界面重复拉起问题
  9. 在n个火柴里面拿3根出来拼接成最大三角形的周长
  10. 年度迷惑新闻:美女其实是个男生?