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.mzph.cn/bicheng/54767.shtml

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

相关文章

【html】基础(二)

本专栏内容为&#xff1a;前端专栏 记录学习前端&#xff0c;分为若干个子专栏&#xff0c;html js css vue等 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;js专栏 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &am…

http增删改查四种请求方式操纵数据库

注意&#xff1a;在manage.py项目入口文件中的路由配置里&#xff0c;返回响应的 return语句后面的代码不会执行&#xff0c;所以路由配置中每个模块代码要想都执行&#xff0c;不能出现return 激活虚拟环境&#xff1a;venv(我的虚拟环境名称&#xff09;\Scripts\activate …

ubuntu20.04编译安装opencv-4.9.0的cuda版本

NVIDIA显卡驱动550.107.02&#xff08;4060显卡&#xff1a;8.9&#xff0c;3060显卡&#xff1a;8.6&#xff09;cuda&#xff1a;12.1cudnn&#xff1a;8.9.7opencv4.9.0&#xff0c;opencv_contrib_4.9.0 前三个安装略过&#xff01; 主要编译安装opencv4.9.0: 下载openc…

Unity3D 小案例 像素贪吃蛇 03 蛇的碰撞

Unity3D 小案例 像素贪吃蛇 第三期 蛇的碰撞&#xff08;完结&#xff09; 像素贪吃蛇 碰撞蛇身 当蛇头碰撞到蛇身时&#xff0c;游戏应该判定为失败。 找到蛇身预制体&#xff0c;添加 Body 标签和碰撞体&#xff0c;碰撞体的大小为 0.5&#xff0c;跟蛇头和蛇身的碰撞体范…

使用数据泵(Data Pump)迁移Oracle数据库数据

目的 将一个oracle数据库实例数据复制给另一个实例 注意事项 sqlplus&#xff08;即在本机linux环境下执行sql&#xff09;、expdp、impdp等命令一般需要切换到oracle用户才能执行 如果你当前是linux的root用户&#xff0c;请切换用户 su - oracle //一般在oracle账号下才能…

node节点使用:

节点&#xff1a; 1.返回父节点 parentNode let par li1.parentNodepar.style.border 1px solid red 2.获取所有子节点的集合 childNodes let nodes par.childNodes 3.第一个子节点 firstChild let frist par.firstChild 4.最后一个 lastChild let last par.lastC…

AlDente Pro for Mac电池健康保护工具

AlDente Pro for Mac 是一款适用于 Mac 的实用电池健康保护工具。以下是它的主要特点和优势&#xff1a; 软件下载地址 一、保护电池寿命的原理 锂离子和聚合物电池&#xff08;如 Mac 笔记本中的电池&#xff09;在 30% 到 80% 之间运行时使用寿命最长。始终将电池电量保持…

service 命令:管理系统服务

一、命令简介 ​service​ 命令是 Linux 系统中用于管理服务的工具&#xff0c;它通过调用位于 /etc/init.d/ ​目录下的服务脚本&#xff0c;来启动、停止、重启、查询状态等操作系统服务&#xff08;守护进程&#xff09;。service ​命令是一个便捷的 shell 脚本&#xff0…

Windows 10 on ARM, version 22H2 (updated Aug 2024) ARM64 AArch64 中文版、英文版下载

Windows 10 on ARM, version 22H2 (updated Aug 2024) ARM64 AArch64 中文版、英文版下载 基于 ARM 的 Windows 10 请访问原文链接&#xff1a;https://sysin.org/blog/windows-10-arm/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;s…

【VUE3.0】动手做一套像素风的前端UI组件库---Message

目录 引言自己整一个UI设计稿代码编写1. 设计信息窗口基础样式2. 设置打开和关闭的方法3. 编写实例化组件的js文件4. 看下最终效果5. 组件完整代码6. 组件调用方式 总结 引言 本教程基于前端UI样式库 NES.css 的UI设计&#xff0c;自行研究复现。欢迎大家交流优化实现方法~ 此次…

深度学习(3):Tensor和Optimizer

文章目录 是什么Tensor1. Tensor 的基本概念2. 自动求导&#xff08;Autograd&#xff09;机制3. requires_grad 属性4. .data 和 .item()5. 梯度清零 Optimizer 是什么 Tensor&#xff08;张量&#xff09;&#xff1a;在 PyTorch 中&#xff0c;Tensor 是一种多维数组&#…

《线性代数》学渣笔记

文章目录 1 行列式1.1 克拉默法则1.2 基本性质1.3 余子式 M i j M_{ij} Mij​1.4 代数余子式 A i j ( − 1 ) i j ⋅ M i j A_{ij} (-1)^{ij} \cdot M_{ij} Aij​(−1)ij⋅Mij​1.5 具体型行列式计算&#xff08;化为基本型&#xff09;1.5.1 主对角线行列式&#xff1a;主…

基于数据挖掘的航空客户满意度分析预测系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 航空公司致力于提供多样化的服务以满足乘客需求&#xff0c;包括但不限于提供免费无线网络、免费食物饮品、提供网上预约服务、飞机出口位置、座椅舒适度、卫生状况等&#xff0c;并希望以此提升乘…

SQL面试常见题目

SQL面试常见题目涉及多个方面&#xff0c;包括数据查询、数据操作、表的设计与优化等。以下列举一些经典的SQL面试题目&#xff0c;并附上解析答案&#xff1a; 1. 查询一张表中重复的数据 题目&#xff1a; 给定一个表 employees&#xff0c;包含 id, name, salary 列。如何…

python基础题练习

1.可否定义一个sum函数呢&#xff1f;返回指定区间的值的和&#xff1f;例如&#xff0c;区间[1,4]的和为123410返回指定区间值的平方的和呢&#xff1f;立方呢&#xff1f; 代码&#xff1a; # 计算从start到end&#xff08;包括end&#xff09;的所有整数的和。 def sum_ra…

AutoX.js向后端传输二进制数据

android的JavaScript自动化软件用过Hamibot和AutoX.js 不过在向后端传输二进制数据时都有些限制&#xff0c;不如浏览器前端那么自由。Hamibot的http按文档应该时能支持传字节数组&#xff0c;但是实际上应该还没有支持。AutoX.js的http也是这样&#xff0c;但是AutoX.js还支持…

P7557 [USACO21OPEN] Acowdemia S题解

[USACO21OPEN] Acowdemia S 题目描述 由于对计算机科学的热爱&#xff0c;以及有朝一日成为 「Bessie 博士」的诱惑&#xff0c;奶牛 Bessie 开始攻读计算机科学博士学位。经过一段时间的学术研究&#xff0c;她已经发表了 N N N 篇论文&#xff08; 1 ≤ N ≤ 1 0 5 1 \leq…

SpringBoot框架之KOB项目 - 配置Mysql与注册登录模块(中)

修改Spring Security 登录验证模式 传统的验证登录模式 公开页面&#xff1a;输入url就可以直接访问授权页面&#xff1a;登录之后才可以访问 Jwt验证模式 容易实现跨域不需要在服务器端存储 对比于传统模式将所有的sessionId换成jwt token access token refresh token 过…

分发饼干00

题目链接 分发饼干 题目描述 注意点 1 < g[i], s[j] < 2^31 - 1目标是满足尽可能多的孩子&#xff0c;并输出这个最大数值 解答思路 可以先将饼干和孩子的胃口都按升序进行排序&#xff0c;随后根据双指针 贪心&#xff0c;将当前满足孩子胃口的最小饼干分配给该孩…

Android开发高频面试题之——Android篇

Android开发高频面试题之——Android篇 Android开发高频面试题之——Java基础篇 Android开发高频面试题之——Kotlin基础篇 Android开发高频面试题之——Android基础篇 1. Activity启动模式 standard 标准模式,每次都是新建Activity实例。singleTop 栈顶复用。如果要启动的A…