字符串最长子串匹配-dp矩阵[转载]
转自:https://blog.csdn.net/zls986992484/article/details/69863710
题目描述:求最长公共子串,sea和eat.它们的最长公共子串为ea,长度为2.。
- #include <stdio.h>
- #include <string.h>
- #define N 50
- int main(){
- char s1[N],s2[N];
- int dp[N][N],i,j,max_len=;
- while(scanf("%s%s",&s1,&s2)!=EOF){
- int len1=strlen(s1);
- int len2=strlen(s2);
- for(int i=;i<len1;i++){
- for(int j=;j<len2;j++){
- if(i==||j==){
- if(s1[i]==s2[j])
- dp[i][j]=;
- else
- dp[i][j]=;
- }else{
- if(s1[i]==s2[j])
- dp[i][j]=dp[i-][j-]+;
- else
- dp[i][j]=;
- }
- if(dp[i][j]>max_len)
- max_len=dp[i][j];
- }
- }
- printf("%d\n",max_len);
- }
- return ;
- }
//dp自己想真的好难,想不出来,dp[i][j]表示的是什么呢?就是s1[i]和s2[j]中分别以i和j为结尾的子串(不一定包括i和j)最长匹配长度。那么很明显dp[i+1][j+1]=dp[i-1][j-1]+s[i]==s[j]?1:0;临界条件如何考虑呢?我写的还是比较简单的。O(m*n)的复杂度。
如果是用最基本的方法,那么就是两层for循环,一个i一个j分别指向当前,并且内部可以有m=i,n=j去判断后面的字符是否匹配,i和j一直控制的是整个字符串匹配的位置,一开始一直想的是如果i和j变了,那么谁去控制整个数组的循环呢?但是可以把它俩复制给别的变量啊。表示s1从i开始,s2从j开始(包括i和j)匹配的长度。dp是和它反过来的。
字符串最长子串匹配-dp矩阵[转载]的更多相关文章
- bnuoj 34985 Elegant String DP+矩阵快速幂
题目链接:http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=34985 We define a kind of strings as elegant s ...
- HDU 5434 Peace small elephant 状压dp+矩阵快速幂
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5434 Peace small elephant Accepts: 38 Submissions: ...
- 【BZOJ】2004: [Hnoi2010]Bus 公交线路 状压DP+矩阵快速幂
[题意]n个点等距排列在长度为n-1的直线上,初始点1~k都有一辆公车,每辆公车都需要一些停靠点,每个点至多只能被一辆公车停靠,且每辆公车相邻两个停靠点的距离至多为p,所有公车最后会停在n-k+1~n ...
- 【BZOJ】4861: [Beijing2017]魔法咒语 AC自动机+DP+矩阵快速幂
[题意]给定n个原串和m个禁忌串,要求用原串集合能拼出的不含禁忌串且长度为L的串的数量.(60%)n,m<=50,L<=100.(40%)原串长度为1或2,L<=10^18. [算法 ...
- BZOJ5298 CQOI2018 交错序列 【DP+矩阵快速幂优化】*
BZOJ5298 CQOI2018 交错序列 [DP+矩阵快速幂优化] Description 我们称一个仅由0.1构成的序列为"交错序列",当且仅当序列中没有相邻的1(可以有相邻 ...
- 【bzoj2004】[Hnoi2010]Bus 公交线路 状压dp+矩阵乘法
题目描述 小Z所在的城市有N个公交车站,排列在一条长(N-1)km的直线上,从左到右依次编号为1到N,相邻公交车站间的距离均为1km. 作为公交车线路的规划者,小Z调查了市民的需求,决定按下述规则设计 ...
- 【bzoj3329】Xorequ 数位dp+矩阵乘法
题目描述 输入 第一行一个正整数,表示数据组数据 ,接下来T行每行一个正整数N 输出 2*T行第2*i-1行表示第i个数据中问题一的解, 第2*i行表示第i个数据中问题二的解, 样例输入 1 1 样例 ...
- Codeforces 621E Wet Shark and Block【dp + 矩阵快速幂】
题意: 有b个blocks,每个blocks都有n个相同的0~9的数字,如果从第一个block选1,从第二个block选2,那么就构成12,问对于给定的n,b有多少种构成方案使最后模x的余数为k. 分 ...
- codeforces E. Okabe and El Psy Kongroo(dp+矩阵快速幂)
题目链接:http://codeforces.com/contest/821/problem/E 题意:我们现在位于(0,0)处,目标是走到(K,0)处.每一次我们都可以从(x,y)走到(x+1,y- ...
随机推荐
- Esper学习之十二:EPL语法(八)
今天的内容十分重要,在Esper的应用中是十分常用的功能之一.它是一种事件集合,我们可以对这个集合进行增删查改,所以在复杂的业务场景中我们肯定不会缺少它.它就是Named Window. 由于本篇篇幅 ...
- html2canvas - 解决办法之图片跨域导致的截图空白
1. 后端支持:图片要是cdn上的地址,并且允许图片跨域,header头中设置应为 Access-Control-Allow-Origin: * 2. 前端配置 var opts = { scale ...
- $.format,jquery.format 使用说明
为jquery添加 format 功能 $.format = function (source, params) { if (arguments.length == 1) return functi ...
- Autojump:一个可以在 Linux 文件系统快速导航的高级 cd 命令
相关博客:https://linux.cn/article-3401-1.html 对于那些主要通过控制台或终端使用 Linux 命令行来工作的 Linux 用户来说,他们真切地感受到了 Linux ...
- gcc6.3的安装
author:headsen chen date: 2018-10-12 15:11:35 1,环境:centos7.3 ,64位,内核 3.10 2,安装过程 #!/bin/bash yum i ...
- 使用docker搭建公司redmine服务器
What is Redmine? Redmine is a flexible project management web application. Written using the Ruby on ...
- DragonBones龙骨插槽的隐藏
参考: 插槽中对象的显示与隐藏问题 let factory = dragonBones.EgretFactory.factory; factory.parseDragonBonesData(RES.g ...
- C# 未能加载文件或程序集“xxx”或它的某一个依赖项。参数错误。(异常来自 HRESULT:0x80070057 (E_INVALIDARG))
错误信息: 因为电脑突然蓝屏,然后重启,再运行项目,报了这个错. 解决方案: 环境是:VS2012+Win7 通过网上查找, 4.0 删除 C:\Windows\Microsoft.NET\Frame ...
- ubuntu1304无法启动桌面系统的问题和解决
今天上班,从oracle官网下载个最新的virtual box,安装后重启电脑,进入桌面后竟然没有菜单栏和启动栏了(就是最上边的bar和左边的应用栏),而且所有启动的窗口都没有菜单栏,终端什么的也都没 ...
- vue--循环列表
<template> <div id="app"> <p v-for="x in list">{{x}}</p> ...