平衡括号串:操作数和右括号需求数的维护过程

题目

如果知识判断合法括号,以及一个左括号对应一个右括号的最少插入次数,都是比较简单的。本题的难点在于:任何左括号"(“必须对应两个连续的右括号”)"

在这里插入图片描述

题解

先写出题目的代码框架:

def minInsertions(s: str) -> int:res = 0  # 记录操作数needs = 0 # 记录对右括号的需求数for i in s:if i == '(':needs += 2elif i == ')':needs -= 1return res + needs

现在考虑什么时候需要插入操作呢?

  1. 先看遇到右括号的时候(这个比较简单),如果needs为负数了,说明右括号太多了,需要补一个左括号啦!
if needs == -1:# 补左括号,操作数+1res += 1# 补了一个左括号,右括号需求加2needs += 2
  1. 再看遇到左括号的时候,这里比较难想到:如果needs为奇数了,需要补一个右括号
if needs % 2 == 1:# 补右括号res += 1needs -= 1
  • 为啥needs会为奇数呢,上面1的操作就会带来needs=1的情况,因为我们加了一个左括号,当时右括号又只有1个,所以加完后needs就等于1了。这个时候再遇到左括号,needs也只会2个2个的加,怎么加都是个奇数。
  • needs为奇数的时候,我不补一个右括号不行吗?不加的时候可以通过54/102个测试案例,但是下面这个就会报错了:

s = “(()))(()))()())))”
输出1,期望输出4。

我们看一下到底是哪里出了问题,我们列出前5次迭代的res和needs的值,可以看到iter=4的时候出现了needs为奇数的情况,也就是(())),此时我们没有进行处理,当iter=5出现左括号的时候,就直接在needs继续减了。但明显我们应该先补一个右括号才是合法的。

iterresneeds
002
104
203
302
401
503

完整代码

def minInsertions(s: str) -> int:res = 0  # 记录操作数needs = 0 # 记录对右括号的需求数for i in s:if i == '(':needs += 2if needs % 2 == 1:# 补右括号一个res += 1needs -= 1elif i == ')':needs -= 1if needs == -1:# 补左括号,操作数+1, needs + 2res += 1needs += 2return res + needs

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

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

相关文章

【Linux】磁盘与文件系统管理

目录 一、 磁盘结构 1. 数据结构 2. 物理结构 3. 硬盘的接口类型 二、 如何使用Linux中的磁盘 三、 文件系统 四、 磁盘分区 1. MBR分区 2. 分区的优缺点 3. 磁盘及分区的管理工具 五、格式化与挂载 1. 格式化 2. 挂载 六、实例演示 1. 演示分区格式化挂载 2. …

吐血整理:大厂Python学习路线,从青铜到王者,从此打卡学习不迷茫

很多朋友都对成为技术大牛有着深深的向往 并有很多技术问题想要解决 因为市面上各种教程质量良莠不齐 而且想要掌握高阶的开发技术 需要耗费大量的时间和精力 现如今每天有数以百万计的人使用 Python ,用户群呈现出指数级增长,几乎没有下降的趋势。 …

基于表面势的增强型p-GaN HEMT器件模型

来源:电子学报 22年 摘要 为了满足功率电路及系统设计对p-GaN HEMT(High Electron Mobility Transistor)器件模型的需求,本文建立了一套基于表面势计算方法的增强型p-GaN HEMT器件SPICE(Simulation Program with Int…

spring-cloud-alibaba微服务Sentinel

Sentinel 官方网站 sentinel-dashboard-1.8.7.jar包下载地址 在window通过命令行启动(java -Dserver.port8080 -Dproject.namesentinel-dashboard -jar sentinel-dashboard-1.8.7.jar),可以通过 -Dserver.port修改控制台的端口 使用的版本最好…

PostgreSQL入门到实战-第二十四弹

PostgreSQL入门到实战 PostgreSQL中表连接操作(八)官网地址PostgreSQL概述PostgreSQL中CROSS JOIN命令理论PostgreSQL中CROSS JOIN命令实战更新计划 PostgreSQL中表连接操作(八) 使用PostgreSQL CROSS JOIN从连接的表中生成行的笛卡尔乘积。 官网地址 声明: 由于操作系统, 版…

AI预测小分子与蛋白的相关特征: MegaMolBART, MoFlow,ESM-1, ESM-2

1、小分子:MegaMolBART, MoFlow 1)MegaMolBART https://github.com/NVIDIA/MegaMolBART 基于 SMILES 的小分子药物发现与化学信息学深度学习模型。 2)MoFlow https://github.com/calvin-zcx/moflow 用flow流方式分子生成 2、蛋白质:ESM-1, ESM-2 https://github.com/fa…

Java GUI制作双人对打游戏(下)

文章目录 前言一、动画是怎么实现的呢?二、根据这个原理 代码是怎么实现的呢?二、代码部分1.角色1(左侧)2.角色2(右侧)补充 最终的包结构效果图: 前言 接上篇:如何在IDEA中使用Java …

Web前端 Javascript笔记3

1、垃圾回收机制 内存中的生命周期 1、内存分配 2、内存使用(读写) 3、内存回收,使用完毕之后,垃圾回收器完成 内存泄漏:该回收的,由于某些未知因素,未释放,叫做内存泄漏 栈&#xf…

C# Window form 自定义控件的结构和设计(三)

C# Window form 自定义控件的结构和设计(三) 一、前面介绍了如何来创建第一个自定义的控件,以及一个测试程序。下面我们来看下如何在自定义控件中添加属性。 C#和其他.NET语言支持属性作为语言的第一类成员。把属性作为语言的基础属性有两点主要的有点&#xff1a…

PoE 技术

1 PoE 技术产生背景 随着 WLAN 、 VoIP 、网络视频监控等新业务的飞速发展,大量的无线 LAN 访问点、 IP 电话、 IP 网络摄像头等基于 IP 的终端出现在工业现场。这些设备通常数量众多、位置特殊 、 布线复杂、设备取电困难,其实施部署不仅消耗大量人力物力,…

karpathy building make more --- 1

1 Introduction 作为一个机器学习的小白,希望和karpathy 大神的这个课程,掌握机器学习的基础概念和方法。 2 任务 根据一个名字文件,做一个起名字的模型。 3 方案1 用统计的方法来实现,我们希望统计每个词的关联性&#xff0…

使用新一代一站式 AI Bot 开发平台扣子coze,搭建我的第一个AI Bot(前端魔法师) ,

目录 1.概述​ 2.功能与优势 3.使用扣子 4.人设与回复逻辑 5.添加插件 6.预览与调试 7.发布bot Store 8.环境大家体验(给大家内置了比较屌的插件) 9.推荐阅读: 1.概述​ 扣子是新一代一站式 AI Bot 开发平台。无论你是否有编程基础…