DP基础_最长公共子串

Description

两个序列的最长公共子串,这个子串要求在序列中是连续的。如:“bab”和“caba” (可以看出来最长公共子串是“ba”或者“ab”)

再如下列X和Y两个数字序列的最长公共子串长度是5,7。

x序列:  1,5,3,2,3

Y序列: 2,3,5,3,2,5,3

所以,上述X和Y序列的最长公共子串是3。

Input

第一行:输入一行两个整数,表示两个序列的长度。空格间隔开。

第二行:输入第一个序列,以空格间隔。

第三行:输入第二个序列,以空格间隔。

Output

输出一个整数,表示最长公共子串的长度。

先上代码

 1 #include<iostream>
2 #include<cstdio>
3 using namespace std;
4 char a[1001],b[1001];
5 int f[1001][1001];
6 int ans;
7 int main()
8 {
9 int m,n;
10 cin>>m>>n;
11 for(int i=1;i<=m;i++)
12 {
13 cin>>a[i];
14 }
15 for(int i=1;i<=n;i++)
16 {
17 cin>>b[i];
18 }
19 for(int i=1;i<=m;i++)
20 {
21 for(int j=1;j<=n;j++)
22 {
23 if(a[i]==b[j])
24 {
25 f[i][j]=f[i-1][j-1]+1;
26 ans=max(ans,f[i][j]);
27 }
28 }
29 }
30 cout<<ans;
31 return 0;
32 }

只要找到我们想要的状态转移方程就好,关键就是咋想呢??

我先遍历每一个数组元素,将其分为两种情况,其中一种就是两个元素不相同的,我直接continue进行下一个就好,对于两者相同的,其长度不就是两个元素各自的数组中其前一个数的长度再加1吗,那方程就自然而然的推出来了:f[i][j]=f[i-1][j-1]+1,然后我们只要比较每一个f[i][j],取他们的最大值就好了

2022/3/17

最长公共子串(DP)的更多相关文章

  1. 经典算法-最长公共子序列(LCS)与最长公共子串(DP)

    public static int lcs(String str1, String str2) { int len1 = str1.length(); int len2 = str2.length() ...

  2. poj1159 dp最长公共子串

    //Accepted 204 KB 891 ms //dp最长公共子串 //dp[i][j]=max(dp[i-1][j],dp[i][j-1]) //dp[i][j]=max(dp[i][j],dp ...

  3. DP:LCS(最长公共子串、最长公共子序列)

    1. 两者区别 约定:在本文中用 LCStr 表示最长公共子串(Longest Common Substring),LCSeq 表示最长公共子序列(Longest Common Subsequence ...

  4. [DP]最长公共子串

    题目 给定两个字符串str1和str2, 长度分别稳M和N,返回两个字符串的最长公共子串 解法一 这是一道经典的动态规划题,可以用M*N的二维dp数组求解.dp[i][j]代表以str1[i]和str ...

  5. [程序员代码面试指南]递归和动态规划-最长公共子串问题(DP,LCST)

    问题描述 如题. 例:输入两个字符串 str1="1AB234",str2="1234EF" ,应输出最长公共子串"234". 解题思路 状 ...

  6. HDU 1503 带回朔路径的最长公共子串

    http://acm.hdu.edu.cn/showproblem.php?pid=1503 这道题又WA了好几次 在裸最长公共子串基础上加了回溯功能,就是给三种状态各做一个 不同的标记.dp[n][ ...

  7. 动态规划(一)——最长公共子序列和最长公共子串

    注: 最长公共子序列采用动态规划解决,由于子问题重叠,故采用数组缓存结果,保存最佳取值方向.输出结果时,则自顶向下建立二叉树,自底向上输出,则这过程中没有分叉路,结果唯一. 最长公共子串采用参考串方式 ...

  8. 最长公共子串 NYOJ 36

    http://acm.nyist.net/JudgeOnline/problem.php?pid=36 最长公共子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 ...

  9. 算法设计 - LCS 最长公共子序列&&最长公共子串 &&LIS 最长递增子序列

    出处 http://segmentfault.com/blog/exploring/ 本章讲解:1. LCS(最长公共子序列)O(n^2)的时间复杂度,O(n^2)的空间复杂度:2. 与之类似但不同的 ...

随机推荐

  1. Sping高质量博文链接集合

    1. Spring事务传播行为详解 https://segmentfault.com/a/1190000013341344

  2. iOS中通过链接地址打开指定APP并传参 by徐文棋

    基于项目需要,有时候需要通过一个链接,或者二维码扫描来直接打开我们所开发的客户端. 当然了.客户端也不仅仅是需要被打开,而且还要跳到相应的页面去,因此这里需要传参. 客户端想用链接打开,必须要在inf ...

  3. 类(静态)变量和类(静态)static方法以及main方法、代码块,final方法的使用,单例设计模式

    类的加载:时间 1.创建对象实例(new 一个新对象时) 2.创建子类对象实例,父类也会被加载 3.使用类的静态成员时(静态属性,静态方法) 一.static 静态变量:类变量,静态属性(会被该类的所 ...

  4. Involuting Bunny! (2021.9)

      文化课就很掉头发,文科都能学好我还怕竞赛?(   大概从"刷的题的题解"推广为"所有做的题的题解"吧,兔子比较懒,这样写题解轻松一些.   Gym10305 ...

  5. Word 模板注入

      要实现word模板注入,需要一个被注入的文档,以及一个注入用的模板. 1.创建一个启用宏的模板   打开word,alt+f8创建编辑宏,在Project->Microsoft Word对象 ...

  6. 使用docker部署awx-1.7.1.0(ansible图形化界面)

    文章目录 关于环境 下载awx 下载安装所需依赖 安装docker-compose 配置inventory文件 出现的报错 TASK [local_docker : Run migrations in ...

  7. Spring系列18:Resource接口及内置实现

    本文内容 Resource接口的定义 Resource接口的内置实现 ResourceLoader接口 ResourceLoaderAware 接口 Resource接口的定义 Java 的标准 ja ...

  8. WPF/MVVM Quick Start Tutorial - WPF/MVVM 快速入门教程 -原文,翻译及一点自己的补充

    转载自 https://www.codeproject.com/articles/165368/wpf-mvvm-quick-start-tutorial WPF/MVVM Quick Start T ...

  9. RPC 技术及其框架 Sekiro 在爬虫逆向中的应用,加密数据一把梭!

    什么是 RPC RPC,英文 RangPaCong,中文让爬虫,旨在为爬虫开路,秒杀一切,让爬虫畅通无阻! 开个玩笑,实际上 RPC 为远程过程调用,全称 Remote Procedure Call, ...

  10. vue的事件监听

    <div id="app"> <button type="button" @click="btnClick(a,$event)&qu ...