字符串---第一部分 序列、字串;上升,公共

news2024/10/7 3:14:44

第一部分 最长上升子序列,最长上升子串,最长公共子序列,最长公共子串--dp

第二部分 KMP,trie,双指针

第三部分 待定

动态规划:审题,状态确定,状态转移,边界条件

线性DP

最长上升子序列

403 线性DP 最长上升子序列【动态规划】_哔哩哔哩_bilibili

给定一个无序整数数组,找出其中最长上升子序列(LIS)的长度。

输入:【5,7,1,9,4,6,2,8,3】

输出:4

解释:最长上升子序列是【1,4,6,8】,其长度是4

如何思考解决这个问题,用s表示这个数组,设f(i)表示以s[i]结尾的的最长上升子序列长度,边界条件f(0)=1,思考当i>=1时,f(i)与f(i-1)的关系,考虑s[i]和s[i-1],或者考虑s[i]与s[0]...s[i-1],至少有一点,f(i)大于等于f(i-1),遍历s[0]...s[i-1],如果记录最大的j,使得s[j]<s[i],且j尽可能大,f(i)=max(f(i-1),f(j)+1),该递推式有问题,修正,f(i)=max(f(i),f(j)+1),这样就没有问题了,

比如5,7,1,9,4,6,2,8,3 

f(0)=1,f(1)=2,f(2)=1,f(3)=f(2)+1=3,f(4)=2,f(5)=3,f(6)=2,f(7)=4,f(8)=3 

上述的过程是可行的,记录最大的f(i)即可,就是答案,如果f(i)表示以s[i]结尾的子串的最长上升子序列,那么显然有f(i)大于f(i-1),但是难以列出状态转移方程。

另外,设f(i)表示以s[i]开头的最长上升子序列长度,从后往前遍历,对于5,7,1,9,4,6,2,8,3 这列数,一共9个数,数组下标从0开始,初始条件f(8)=1,当s[i]<s[i+1]时,更新f(i)=max(f(i),f(i+1)+1),

最长上升序列求解,重点在于如何将状态函数与字符串之间的关系唯一确定下来,如果采用以s[i]结尾的最长公共子序列长度作为f(i)的含义,从前往后搜索,可以得到转换公式;如果采用以s[i]开头的最长公共子序列长度作为f(i)的含义,改变搜索方向,同样可以得到转换的公式。如果采用s[0]...s[i]的最大上升子序列长度作为f(i)的含义,很难得到转换公式,f(i)的值(但是这个是根据题目含义最容易想的状态含义,难以求解出状态转移方程)

如何确定状态函数的含义

 定义f(i)表示爬到高度为i时需要的期望时间,由高度i-1可以转换为两个状态,分别是高度0,概率是pi;转换为高度i,概率是1-pi;在上述定义下,难以写出转换方程

定义f(i)为从高度为i爬到树顶需要的期望时间,则f(树高度)=0,状态转移是,f(i-1)=(1-pi)*f(i)+pi*f(0)+1,需要求解的就是从树的底部(高度为0)爬到树顶经过的时间的期望值f(0).

最长公共子序列

给定两个字符串,输出其最长公共子序列的长度,输入,ADABEC与DBDCA

输出:3

解释:最长公共子序列是DBC,长度是3

从左向右扫描两个字符串a,b,指针分别使用i和j,状态变量,看作自变量i和j的函数,数据结构实现可以使用二维数组,f(i,j)表示a[0]...a[i]与b[0]...b[j]的最长公共子序列长度,f(0,0)=0,状态转移方程,如果a[i]=b[j],有f(i,j)=f(i-1,j-1)+1,如果a[i]!=b[j],分为三种情况,分别是a[i]不在最长公共子序列中,f(i,j)=f(i-1,j),b[j]不在最长公共子序列中,f(i,j)=f(i,j-1),a[i]和b[j]都不在最长公共子序列中,f(i,j)=f(i-1,j-1),其中第三种可以看成前两种的特例,如果a[i]!=b[j]有f(i,j)=max(f(i-1,j),f(i,j-1));  

最长上升子串

参考最长上升子序列做法,设f(i)表示以s[i]结尾的最长上升子串的长度,f(0)=0,如果s[i]>s[i-1],f(i)=f(i-1)+1,否则f(i)=0;最长上升子串长度是最大的f(j),j=0,1,...,n-1.

最长公共子串

参考最长公共子序列做法,设f(i,j)表示a[0]...a[i]和b[0]...b[j]的最长公共子串的长度,f(0,0)=0,如果a[i]!=b[j],f(i,j)=0;如果a[i]==b[j],则f(i,j)=f(i-1,j-1)+1;

只有当两个字符串中的字符连续相等时,公共字串的长度才不断增加。


 

最长上升公共子串

参考最长公共子序列做法,设f(i,j)表示a[0]...a[i]和b[0]...b[j]的最长公共子串的长度,f(0,0)=0,如果a[i]!=b[j],f(i,j)=0;如果a[i]>a[i-1]且b[j]>b[j-1]且a[i]==b[j]且a[i-1]==b[j-1],则f(i,j)=f(i-1,j-1)+1;如果a[i]==b[j]且a[i-1]==b[j-1]且a[i]>a[i-1],则f(i,j)=f(i-1,j-1)+1;否则,如果a[i]==b[j],则f(i,j)=1;,否则f(i,j)=0.

最长上升公共子序列

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/573225.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis客户端介绍

Redis客户端 命令行客户端 redis安装完成后有自带的命令行客户端&#xff0c;即redis-cli&#xff0c;使用方式如下 redis-cli [options][commonds]options——参数 -h 127.0.0.1&#xff1a;指定要连接的redis节点的ip地址&#xff0c;默认值127.0.0.1-p 6379&#xff1a;指…

[中间件漏洞]nginx漏洞复现

目录 文件解析漏洞 原理分析 复现过程 防御方法 目录遍历漏洞 原理分析 复现过程 防御方法 空字节代码执行漏洞 复现过程 防御方法 整数溢出漏洞&#xff08;CVE-2017-7529&#xff09; 复现过程 防御方法 文件名逻辑漏洞&#xff08;CVE-2013-4547&#xff09; 复现过程 防…

学习笔记 | 基于大模型的优质 Prompt 开发课

文章目录 一、前言二、主要内容三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 手把手带你构建高质量 Prompt&#xff0c;掌握以文心一言为代表的大模型对话技巧与高级用法&#xff0c;与大模型高效交流从而释放大模型强大的生成能…

震坤行平台商品详情页面数据

震坤行&#xff08; &#xff08;zkh.com&#xff09; 商品详情页面数据通常包括以下信息&#xff1a; 商品名称、型号、品牌、颜色、大小等基本属性商品主图和详细图集&#xff0c;包括多角度展示、细节展示等商品描述&#xff0c;包括功能介绍、使用方法、注意事项等商品价格…

如何在华为OD机试中获得满分?Java实现【简单的解压缩算法】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述4. Java算法源码5. 测试6.解题思路1. 题目描述 现需要实现一种算法,能…

Python解析excel之Android多语言支持

最新车企给了一份多语言的翻译表&#xff0c;需要进行多语言支持&#xff0c;像下面这样 针对这种文件&#xff0c;我们肯定不能一个个字符串取拷贝&#xff0c;很容易出错&#xff0c;所以想用python取处理这个表格然后生成对应的string文件. 1.首先我们建立好string的文件夹…

手写简单的RPC框架(一)

一、RPC简介 1、什么是RPC RPC&#xff08;Remote Procedure Call&#xff09;远程过程调用协议&#xff0c;一种通过网络从远程计算机上请求服务&#xff0c;而不需要了解底层网络技术的协议。RPC它假定某些协议的存在&#xff0c;例如TPC/UDP等&#xff0c;为通信程序之间携…

【P33】JMeter 临界部分控制器(Critical Section Controller)

文章目录 一、临界部分控制器&#xff08;Critical Section Controller&#xff09;参数说明二、测试计划设计 一、临界部分控制器&#xff08;Critical Section Controller&#xff09;参数说明 可以对指定代码块增加同步锁&#xff0c;确保此代码块由单线程执行&#xff1b;…

【C++】初入C++

认识C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的程序&#xff0c;需要高度的抽象和建模时&#xff0c;C语言则不合适。为了解决软件危机&#xff0c; 20世纪80年代&#xff0c; 计算机界提出了OOP(object orient…

Gap业绩逆转,宝尊电商是如何当好“全球品牌数字商业伙伴”的?

电商永不眠。技术、消费趋势、供应链&#xff0c;任何一个因素都可以引起商业格局的巨变。一些看似普通的事件落到一个品牌身上&#xff0c;往往会带来改变命运的巨大变化。就像今年2月&#xff0c;宝尊官宣已完成对Gap大中华区的收购&#xff0c;到现在&#xff0c;Gap便已在宝…

探究javascript对象和数组的异同,及函数变量缓存技巧

javascript中最经典也最受非议的一句话就是&#xff1a;javascript中一切皆是对象。这篇重点要提到的&#xff0c;就是任何jser都不陌生的Object和Array。 有段时间曾经很诧异&#xff0c;到底两种数据类型用来存储数据有什么不同。于是&#xff0c;我打算探究探究。 一、掌握三…

9. python的if语句

文章目录 一、if结构1.1 比较符号1.1.1 使用比较两个数据是否相等&#xff1a;1.1.2 使用!号比较数据是否不相等1.1.3 使用<号比较数字大小关系1.1.4 使用<号比较数字大小关系1.1.5 使用>号比较数字大小关系1.1.6 使用>号比较数字大小关系 1.2 关键字1.2.1 and关键…

计算机系统漫游

重点理解部分&#xff1a; 系统硬件&#xff1a;对硬件如处理器、存储器、I/O设备有一个基本的认识&#xff0c;理解它们的基本工作原理以及它们是如何协同工作的。Hello&#xff0c;World程序运行的过程&#xff1a;了解一个C程序如何从源代码到最终在计算机上运行的全过程。…

智慧农业大数据平台的“智慧”体现在哪些方面?

看到农业两个字&#xff0c;我们先想起来的是什么&#xff1f;是耕种呢&#xff0c;还是灌溉&#xff1f; 其实&#xff0c;种植业只是狭义上的农业&#xff0c;从广义上讲&#xff0c;农业指包括种植业、林业、畜牧业、渔业、副业五种产业形式。所以&#xff0c;山东仁科智慧…

电脑如何查找重复文件?轻松揪出它!

电脑如何查找重复文件&#xff1f;小编每天要接触各种文档、图片等资料&#xff0c;很多时候下载了一些图片后&#xff0c;我根本记不住&#xff0c;下次看到不错的图片&#xff0c;我又会下载下来&#xff0c;结果就是和之前下载的图片是一样的内容。下载的重复文件多了&#…

如何处理SAP错误:不可能为条目1000 UMB 1000 MR1 2004确立帐户 (附:ChatGPT 如何处理这个问题的?)

SAP财务用户在MR22 进行修改物料价格时&#xff0c;出现了一个报错。报错如下&#xff1a;“不可能为条目1000 UMB 1000 MR1 2004确立帐户”。 Account determination for entry 1000 UMB 1000 MR2 2004 not possible Message No. M8147 Diagnosis The system did not find …

Web安全:代码执行漏洞 测试(防止 黑客利用此漏洞.)

Web安全&#xff1a;代码执行漏洞 测试 攻击者可以通过构造恶意输入来欺骗应用程序执行恶意代码。这种漏洞通常出现在应用程序中使用动态语言(如 PHP、Python、Ruby 等)编写的代码中&#xff0c;因为这些语言允许在运行时动态执行代码。攻击者可以通过构造特定的输入来欺骗应用…

利用canvas画一个时钟

利用canvas画一个时钟 详细步骤 画中心圆点和刻度线 画时针 画分针 画秒针 下面是整体代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body&g…

【亲测有效】idea部署jrebel插件

idea部署jrebel插件 1.背景 最近在维护tomcat项目&#xff0c;工程修改代码后需要rebuild才能更新class文件&#xff0c;进而运行生效。 同事介绍jrebel可以实现热部署&#xff0c;于是接入使用。 2.简介 JRebel是一套JavaEE开发工具。 Jrebel 可快速实现热部署&#xff0c…

尚硅谷Docker实战教程-笔记02【安装docker、镜像加速器配置】

尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址&#xff1a;尚硅谷Docker实战教程&#xff08;docker教程天花板&#xff09;_哔哩哔哩_bilibili 尚硅谷Docker实战教程-笔记01【理念简介、官网介绍、平台入门图解、平台架构图解】尚硅谷Docker实战教程-笔…