LeetCode: 2207. 字符串中最多数目的子序列 一次遍历数组,时间复杂度O(n)

2207. 字符串中最多数目的子序列

today 2207 字符串中最多数目的子序列

题目描述

你一个下标从 0 开始的字符串 text 和另一个下标从 0 开始且长度为 2 的字符串 pattern ,两者都只包含小写英文字母。

你可以在 text 中任意位置插入 一个 字符,这个插入的字符必须是 pattern[0] 或者 pattern[1] 。注意,这个字符可以插入在 text 开头或者结尾的位置。

请你返回插入一个字符后,text 中最多包含多少个等于 pattern 的 子序列 。

子序列 指的是将一个字符串删除若干个字符后(也可以不删除),剩余字符保持原本顺序得到的字符串。

示例 1:
输入:text = “abdcdbc”, pattern = “ac”
输出:4
解释:
如果我们在 text[1] 和 text[2] 之间添加 pattern[0] = ‘a’ ,那么我们得到 “abadcdbc” 。那么 “ac” 作为子序列出现 4 次。
其他得到 4 个 “ac” 子序列的方案还有 “aabdcdbc” 和 “abdacdbc” 。
但是,“abdcadbc” ,“abdccdbc” 和 “abdcdbcc” 这些字符串虽然是可行的插入方案,但是只出现了 3 次 “ac” 子序列,所以不是最优解。
可以证明插入一个字符后,无法得到超过 4 个 “ac” 子序列。

示例 2:
输入:text = “aabb”, pattern = “ab”
输出:6
解释:
可以得到 6 个 “ab” 子序列的部分方案为 “aaabb” ,“aaabb” 和 “aabbb” 。

提示:
1 <= text.length <= 105
pattern.length == 2
textpattern 都只包含小写英文字母。

解题思路

这道题目是一道字符串匹配问题,我们可以遍历 text,使用 first_count 来记录已经遇到的 pattern[0] 的个数。每当遇到 pattern[1] 时,所有之前遇到的 pattern[0] 都可以和当前的 pattern[1] 组成一个子序列,所以每次遇到 pattern[1] 时,更新子序列计数。
res 表示目前已经形成的 pattern 子序列个数。

之后,为了最大化子序列数量,我们可以:

  • 在 text 的开头插入一个 pattern[0],这样每个 pattern[1] 都可以与之构成一个新的子序列,增加 second_count 个子序列。
  • 在 text 的结尾插入一个 pattern[1],这样每个 pattern[0] 都可以与之构成一个新的子序列,增加 first_count 个子序列。

res=max(second_count,first_count)+res

最后,我们返回 res。

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n),其中 n 是 text 的长度。
  • 空间复杂度: O ( 1 ) O(1) O(1),只使用常数的额外空间。

代码实现

Python实现:

class Solution(object):def maximumSubsequenceCount(self, text, pattern):firstNum=0secondNum=0first=pattern[0]second=pattern[1]res=0for i in text:if i==second:secondNum+=1res+=firstNumif i==first:firstNum+=1return res + max(firstNum, secondNum)

Go实现:

func maximumSubsequenceCount(text string, pattern string) int64 {var res int64firstCount, secondCount := int64(0), int64(0)first := pattern[0]second := pattern[1]// 遍历text,统计符合pattern[0]开头,pattern[1]结尾的子序列个数for _, char := range text {if byte(char) == second {// 每遇到一个pattern[1]字符,所有之前的pattern[0]字符都可以与之形成一个子序列res += firstCountsecondCount++}if byte(char) == first {// 统计pattern[0]字符的出现次数firstCount++}}// 结果是原始子序列加上插入后的最大值return res + max(firstCount, secondCount)
}

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

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

相关文章

将Pytorch环境打包,快速部署到另一台机器上(在没有网络,或者网络环境不好的情况下推荐使用)

打包PyTorch环境 当您需要在不同的机器上快速部署包含PyTorch的Python环境时&#xff0c;使用conda-pack是一个很好的选择。conda-pack可以打包一个完整的Conda环境&#xff0c;包括所有已安装的包和依赖项&#xff0c;使其能够轻松地在其他机器上还原。 步骤一&#xff1a;…

My_string 运算符重载,My_stack

思维导图 将My_string类中的所有能重载的运算符全部进行重载 、[] 、>、<、、>、<、! 、&#xff08;可以加等一个字符串&#xff0c;也可以加等一个字符&#xff09;、输入输出(<< 、 >>) My_string my_string.h #ifndef MY_STRING_H #define MY_…

【Web】初识Web和Tomcat服务器

目录 前言 一、认识web 1. 软件架构模式 2. web资源 3. URL请求路径&#xff08;统一资源定位符&#xff09; 二、Tomcat服务器 1. 简介 2. tomcat服务器的目录结构 3.使用tomcat服务器启动失败的常见原因 3.1 端口冲突 3.2 jdk环境变量配置出错 三、使用Tomcat发布…

重塑教育未来:数字教学与智能知识库的深度融合

在当今这个信息爆炸的时代&#xff0c;教育作为推动社会进步与发展的重要基石&#xff0c;正经历着前所未有的变革。随着科技的飞速发展&#xff0c;数字教学与智能知识库作为两大核心驱动力&#xff0c;正携手并进&#xff0c;共同塑造着教育的全新面貌。本文旨在探讨数字教学…

【Docker】Docker快速入门

Docker学习笔记 一、Docker概述 为什么会出现Docker? 安卓开发流程&#xff1a;apk(java开发的)发布到应用商店&#xff0c;用户安装apk即可使用。 后端开发流程&#xff1a; jar(java开发的)带上环境发布到Docker仓库&#xff0c;用户从Docker仓库拉取镜像并部署。 总结…

Java_Day05学习

Object类被子类经常重写的方法 方法说明toString()返回当前对象本身的有关信息&#xff0c;按字符串对象返回equals()比较两个对象是否是同一个对象&#xff0c;是则返回****truehashCode()返回该对象的哈希代码值getClass()获取当前对象所属的类信息&#xff0c;返回Class对象…

TAPD多类别需求管理

本文档将介绍&#xff1a;什么是 TAPD 多类别需求管理&#xff0c;以及如何配置或创建新的需求类别。 一、概述 在研发管理过程中&#xff0c;团队经常会遇到规模扩张、不同特性团队间研发模式差异化大等问题。以上问题导致团队中的需求无法进行统一管理。为解决上述情况&…

《关键跃升读书笔记》11

协作&#xff1a; 怎么解决“容忍⿊”这类问题&#xff1f;我们要重新理解“⽂化”。⼈类⽂化、企 业⽂化&#xff0c;都是为了让⼈们更好地协作。 再⼩的公司&#xff0c;再⼩的团队&#xff0c;都是⼀个共同协作体&#xff0c;就像整个⼈类社会 是共同协作体。理解了⼈类社会…

卷积的理解和应用

妈妈说&#xff0c;生活就像一盒各种口味的巧克力&#xff0c;你永远不知道下一块是什么。 我说生活像这个棒棒糖。不同口味&#xff0c;方向相反的味道一路走一路相伴&#xff0c;衰老和成长缠绕在一起&#xff0c;成了最终的滋味。 一、 卷积的直觉 这一生…

菱形继承的类对父类的初始化、组合、多态、多态的原理等的介绍

文章目录 前言一、菱形继承的类对父类的初始化二、组合三、 多态1. 构成多态2. 虚函数3. 虚函数的重写4. 虚函数重写的两个例外1. 协变2. 析构函数的重写 5. C11 final 和 override1. final2. override 6. 设计不想被继承的类7. 重载、覆盖&#xff08;重写&#xff09;、 隐藏…

YOLOv8——测量高速公路上汽车的速度

引言 在人工神经网络和计算机视觉领域&#xff0c;目标识别和跟踪是非常重要的技术&#xff0c;它们可以应用于无数的项目中&#xff0c;其中许多可能不是很明显&#xff0c;比如使用这些算法来测量距离或对象的速度。 测量汽车速度基本步骤如下&#xff1a; 视频采集&#x…

JVM的基本组成

一、JDK\JRE\JVM JDK: 全称 "Java Development Kit" &#xff0c;Java 开发工具包&#xff0c;提供 javac 编译器、jheap、jconsole 等监控工具;JRE: 全称"Java Runtime Environment"&#xff0c;Java 运行环境&#xff0c;提供Class Library 核心类库 JV…

同等学力英语用什么app背单词

同等学力申硕的意义和作用 授予同等学力人员硕士学位是国家为同等学力人员开辟的获得学位的渠道&#xff0c;对于在职人员业务素质的提高和干部队伍建设起到积极作用。它为那些没有传统学历背景但具有相应学术水平的人员提供了获取学位的机会&#xff0c;有助于提升他们的职业竞…

WebSocket实现在线聊天室

项目实现源码&#xff1a; 前端源码 后端源码 1.常见的消息推送方式 1.1 轮询 1.1.1 轮询的概念 客户端以固定的事件间隔&#xff08;例如每秒或几分钟&#xff09;向服务器发送HTTP请求&#xff0c;服务器收到请求后&#xff0c;处理请求并返回数据给客户端 轮询具体实现htt…

POI获取模板文件,替换数据横纵动态表格、折线图、饼状图、折线饼状组合图

先说几个关键的点 pom.xml依赖 <dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version> </dependency> <dependency><groupId>com.deepoove</groupId>&…

鸭脖变“刺客”,啃不起了

撰文&#xff5c;ANGELICA 编辑&#xff5c;ANGELICA 审核&#xff5c;烨 Lydia 声明&#xff5c;图片来源网络。日晞研究所原创文章&#xff0c;如需转载请留言申请开白。 你有多久没吃卤味了&#xff1f; 2020年之后&#xff0c;人们对于几大卤味巨头的关注度正在下降。 …

【MySQL 04】数据类型

目录 1.数据类型分类 2.数值类型 2.1 tinyint 类型 2.2 bit类型 2.3 float类型 2.4decimal 3.字符串类型 3.1 char类型 3.2 varchar类型 4.日期和时间类型 6. enum和set类型 6.1.enum和set类型简介&#xff1a; 6.2.enum和set的一般使用方法 6.3.用数字的方式…

业务数据批量插入数据库实践

业务数据如何存储一直以来都是项目开发中的一个比较重要的话题。我们要从资源的利用率&#xff0c;业务场景和技术实现多个方面考虑存储的问题。“抛开业务谈技术就是耍流氓”&#xff0c;所有技术架构都要站在实际的业务场景中分析。比如个人端的产品&#xff0c;这种就属于读…

fiddler抓包11_列表显示服务器IP (配置文件)

请求列表默认不显示服务器IP字段&#xff0c;也无法从定制列窗口添加&#xff0c;可以修改CustomRules.js实现。 ① 菜单栏“Rules”&#xff08;规则&#xff09; - “Customize Rules...”&#xff08;自定义规则&#xff09;&#xff0c;打开CustomRules.js文件。 &#xf…