LeetCode Python - 32.最长有效括号

目录

  • 题目
  • 答案
    • 方法一:动态规划
    • 方法二:使用堆栈
  • 运行结果
    • 方法一
    • 方法二


题目

给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号
子串的长度。

示例 1:

输入:s = “(()”
输出:2
解释:最长有效括号子串是 “()”

示例 2:

输入:s = “)()())”
输出:4
解释:最长有效括号子串是 “()()”

示例 3:

输入:s = “”
输出:0

提示:

  • 0 <= s.length <= 3 * 104
  • s[i] 为 ‘(’ 或 ‘)’

答案

方法一:动态规划

class Solution(object):
    def longestValidParentheses(self, s):
        """
        :type s: str
        :rtype: int
        """
        n = len(s)
        f = [0] * (n + 1)
        for i, c in enumerate(s, 1):
            if c == ")":
                if i > 1 and s[i - 2] == "(":
                    f[i] = f[i - 2] + 2
                else:
                    j = i - f[i - 1] - 1
                    if j and s[j - 1] == "(":
                        f[i] = f[i - 1] + 2 + f[j - 1]
        return max(f)

方法二:使用堆栈

维护一个堆栈来存储左括号的索引。使用值 -1 初始化堆栈的底部元素,以便于计算有效括号的长度。
遍历字符串的每个元素:

  • 如果字符是左括号,则将字符的索引推到堆栈上。
  • 如果字符是右括号,请从堆栈中弹出一个元素,表示我们找到了一对有效的括号。
    如果堆栈为空,则表示我们找不到与右括号匹配的左括号。在这种情况下,请将字符的索引作为新的起点推送。
    如果堆栈不为空,请计算有效括号的长度并更新它。

总结:

该算法的关键是维护一个堆栈来存储左括号的索引,然后通过推送和弹出元素来更新括号的有效子字符串的长度。

class Solution(object):
    def longestValidParentheses(self, s):
        """
        :type s: str
        :rtype: int
        """
        stack = [-1]
        ans = 0
        for i in range(len(s)):
            if s[i] == '(':
                stack.append(i)
            else:
                stack.pop()
                if not stack:
                    stack.append(i)
                else:
                    ans = max(ans, i - stack[-1])
        return ans

运行结果

方法一

在这里插入图片描述

方法二

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习入门-小白必看

机器学习 1. 机器学习的基本概念与背景2. 机器学习的常用方法3.是否需要学习机器学习&#xff0c;机器学习已经过时了&#xff1f;&#xff1f;4. 如何在机器学习上进行创新&#xff1f;5. 我该用哪种机器学习方法&#xff0c;如何定下来呢&#xff1f;总结&#xff08;对小白的…

O2O:Actor-Critic Alignment for Offline-to-Online Reinforcement Learning

ICML 2023 Poster paper 1 Introduction O2O容易因为分布偏移导致策略崩溃&#xff0c;解决方法包括限制策略偏移计以及平衡样本采样等。然而这些方法需要求解分布散度或者密度比(density ratio)。为了避免这些复杂操作&#xff0c;本文并不采用以往AC方法对Q值进行变形&…

【笔记】Android 漫游定制SPN定制有关字段

一、SPN模块简介 【笔记】SPN和PLMN 运营商网络名称显示 Android U 配置 WiFiCalling 场景下PLMN/SPN 显示的代码逻辑介绍 【笔记】Android Telephony 漫游SPN显示定制&#xff08;Roaming Alpha Tag&#xff09; 二、相关配置字段 non_roaming_operator_string_array 是否…

关于yolov8的output0

关于yolov8的output0 // output0nvinfer1::IElementWiseLayer* conv22_cv2_0_0 convBnSiLU(network, weightMap, *conv15->getOutput(0), base_in_channel, 3, 1, 1, "model.22.cv2.0.0");nvinfer1::IElementWiseLayer* conv22_cv2_0_1 convBnSiLU(network, we…

Cesium 自定义Primitive - 圆

一、创作思路 1、创建一个自定义CustomPrimitive 2、然后根据两个点&#xff0c;生成圆 3、方便后期绘制圆 二、实现代码 1、在vue的包中加入turf. npm install turf/turf 1、创建一个CustomCirclePrimitive类,并加入更新的代码 export default class CustomCirclePrimitive …

StarRocks实战——贝壳找房数仓实践

目录 前言 一、StarRocks在贝壳的应用现状 1.1 历史的数据分析架构 1.2 OLAP选型 1.2.1 离线场景 1.2.2 实时场景 1.2.3 StarRocks 的引入 二、StarRocks 在贝壳的分析实践 2.1 指标分析 2.2 实时业务 2.3 可视化分析 三、未来规划 3.1 StarRocks集群的稳定性 3…

STM32:CAN功能板设计和调试

0前言 本文主要目的是&#xff0c;总结去年设计stm32-CAN板子过程中遇到的问题&#xff0c;分为keil嵌入式软件和嘉立创EDA设计两个部分。 1 STM32F1 CAN功能 keil expected a “}“ 问题在于&#xff0c;PCB使用芯片为stm32f103c8t6&#xff0c;下载程序时选择device默认此…

在cadence中导入工艺库和仿真状态的方法

在cadence中导入库和仿真状态的方法 一、在cadence中导入库 1、打开cadence的启动界面&#xff0c;如图 2、右键空白处&#xff0c;添加library 3、找到自己的库文件路径即可 二、在cadence中导入仿真状态 1.打开ADE L界面 2.选择好自己需要的状态&#xff0c;注意要取…

Leet code 1089 复写0

1、先找到最后一个数 比如示例1中答案的最后一个数是4 定义两个指针 dest 和 cur dest初始位置是-1 cur初始位置为 0 如果arr[cur]为非零元素 dest位置1 如果arr[cur]为零元素 dest位置2 直到cur<arr.size() 或者 dest>arr.size()-1 cur就是最后一个元素位置 2、…

Swing程序设计(11)动作事件监听器,焦点事件监听器

文章目录 前言一、事件监听器是什么&#xff1f;二、详细展开 1.动作事件监听器2.焦点事件监听器总结 前言 如果你是坚持从Swing程序第一篇看到了这里&#xff0c;恭喜你&#xff0c;Swing程序设计简单地落下了帷幕&#xff0c;关于Swing程序更深的了解&#xff0c;可以自行学习…

在Vue中根据Url下载地址生成二维码展示在界面上

最近来了一个新需求&#xff0c;就是在网页页面上点击按钮不在是直接下载app安装包&#xff0c;需要支持手机扫码下载app&#xff0c;避免他们需要先从电脑上下载&#xff0c;然后传到微信&#xff0c;然后手机从微信上下载下来&#xff0c;得了&#xff0c;需求就是根据后端传…

【Python】-----基础知识

注释 定义&#xff1a;让计算机跳过这个代码执行用三个单引号/双引号都表示注释信息&#xff0c;在Python中单引号与双引号没有区别&#xff0c;但必须是成对出现 输出与输入 程序是有开始&#xff0c;有结束的&#xff0c;程序运行规则&#xff1a;从上而下&#xff0c;由内…

稀碎从零算法笔记Day6-LeetCode:长度最小的子数组

前言&#xff1a;做JD的网安笔试题&#xff0c;结果查找子串&#xff08;单词&#xff09;这个操作不会。痛定思痛&#xff0c;决定学习滑动数组 题型&#xff1a;数组、双指针、滑动窗口 链接&#xff1a;209. 长度最小的子数组 - 力扣&#xff08;LeetCode&#xff09; 来…

ATFX汇市:油价回落之际加元币值走弱,USDCAD有望刷新年内新高

ATFX汇市&#xff1a;加元是商品货币&#xff0c;币值受到国际油价和精炼石油出口的显著影响。2022年3月份&#xff0c;国际油价达到130美元的峰值水平&#xff0c;随后开启回落走势&#xff0c;时至今日&#xff0c;最新报价在80美元下方&#xff0c;累计跌幅近40%。疲弱的油价…

【框架学习 | 第一篇】一篇文章快速入门MyBatis

文章目录 1.Mybatis介绍1.1Mybatis历史1.2Mybatis特点1.3与其他持久化框架对比1.4对象关系映射——ORM 2.搭建Mybatis2.1引入依赖2.2创建核心配置文件2.3创建表、实体类、mapper接口2.4创建映射文件2.4.1映射文件命名位置规则2.4.2编写映射文件2.4.3修改核心配置文件中映射文件…

基于springboot+vue的医疗报销系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

培训机构如何通过小魔推做高效短视频矩阵?

随着智能手机的普及和移动互联网的高速发展&#xff0c;短视频作为一种全新的媒介形式&#xff0c;迅速崛起并占领了大量用户的碎片化时间。从野蛮生长到全面流行&#xff0c;逐渐成为各行业引流获客的主战场之一。 各行各业都意识到了短视频平台的潜力&#xff0c;今天给大家…

【JAVA】Tomcat集成到IDEA

目录 1.在IDEA中安装插件&#xff1a;Smart Tomcat。 2.配置smart tomcat 浏览器显示中文出现乱码 我们可以借助IDEA的插件&#xff0c;把tomcat集成IDEA中&#xff0c;然后我们就可以通过IDEA一键式的重新打包部署了。 1.在IDEA中安装插件&#xff1a;Smart Tomcat。 1&a…

建立网络防御时需要重点考虑的10个因素

互联网安全中心&#xff08;CIS&#xff09;建议企业可以从以下10个因素入手&#xff1a;资产管理、数据管理、安全配置、账户和访问控制管理、漏洞管理、日志管理、恶意软件防御、数据恢复、安全培训和事件响应。 1、资产管理 建立网络防御的第一步是制定企业资产和软件资产的…

day12_oop_抽象和接口

今日内容 零、 复习昨日 一、作业 二、抽象 三、接口 零、 复习昨日 final的作用 修饰类,类不能被继承修饰方法,方法不能重写[重点]修饰变量/属性,变成常量,不能更改 static修饰方法的特点 static修饰的方法,可以通过类名调用 static修饰的属性特点 在内存只有一份,被该类的所有…