32.最长有效括号 python

最长有效括号

  • 题目
    • 题目描述
    • 示例 1:
    • 示例 2:
    • 示例 3:
    • 提示:
    • 题目链接
  • 题解
    • 算法步骤:
    • python实现
    • 解释:
    • 提交结果

题目

题目描述

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

示例 1:

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

示例 2:

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

示例 3:

输入:s = “”
输出:0

提示:

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

题目链接

最长有效括号

题解

要解决这个问题,我们可以使用栈(stack)来帮助我们追踪括号匹配的情况。具体来说,栈可以帮助我们记住每一个未匹配的左括号的位置,当我们遇到一个右括号时,可以尝试与最近的未匹配的左括号进行匹配,并计算有效括号子串的长度。

此外,为了处理所有可能的有效括号子串,我们需要考虑从字符串的两端进行扫描。这是因为有些情况下,仅从左到右或仅从右到左的一次扫描无法覆盖所有的有效括号组合。例如,在字符串 ")(()())" 中,从左到右扫描会错过中间的 "()()" 有效子串;而从右到左扫描则能正确捕捉到这个情况。

下面是具体的算法实现:

算法步骤:

  1. 初始化变量:设置两个计数器 leftright 分别记录左括号和右括号的数量,以及结果变量 max_len 来保存最长有效括号子串的长度。
  2. 从左向右扫描:遍历字符串,当遇到左括号时增加 left 计数,遇到右括号时增加 right 计数。如果 leftright 相等,则更新 max_len;如果 right 大于 left,重置计数器。
  3. 从右向左扫描:同样地,重新遍历字符串但这次是从右往左,目的是为了捕捉那些在第一次扫描中被忽略的有效括号子串。这里需要交换 leftright 的角色。
  4. 返回结果:最终返回 max_len

这种方法的时间复杂度是 O(n),因为每个字符最多被访问两次(一次从左到右,一次从右到左),空间复杂度是 O(1),因为我们只用了常数级别的额外空间。

python实现

以下是 Python 实现代码:

def longestValidParentheses(s: str) -> int:left = right = max_len = 0# From left to rightfor char in s:if char == '(':left += 1elif char == ')':right += 1if left == right:max_len = max(max_len, 2 * right)elif right > left:left = right = 0left = right = 0# From right to leftfor char in reversed(s):if char == '(':left += 1elif char == ')':right += 1if left == right:max_len = max(max_len, 2 * left)elif left > right:left = right = 0return max_len

解释:

  • 第一次扫描(从左到右):这一步确保了我们可以找到所有以左括号开始的有效括号子串。
  • 第二次扫描(从右到左):这一步是为了补充第一次扫描中可能遗漏的情况,即那些以右括号结束的有效括号子串。

通过结合这两个方向的扫描,我们可以准确地找出最长的有效括号子串。

提交结果

在这里插入图片描述

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

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

相关文章

OpenCV相机标定与3D重建(13)检测给定图像中是否存在符合指定尺寸的棋盘格图案函数checkChessboard()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::checkChessboard 是 OpenCV 库中的一个函数&#xff0c;用于检测给定图像中是否存在符合指定尺寸的棋盘格图案。这个函数对于相机校准非常重…

规范秩相关信息搜集Day2

系列博客目录 文章目录 系列博客目录1.A Survey on Tensor Techniques and Applications in Machine Learning2.有没有研究低秩矩阵有利于分类的计算机方面的论文呢3.Image classification based on low-rank matrix recovery and Naive Bayes collaborative representatio 基于…

2024年华中杯数学建模C题基于光纤传感器的平面曲线重建算法建模解题全过程文档及程序

2024年华中杯数学建模 C题 基于光纤传感器的平面曲线重建算法建模 原题再现 光纤传感技术是伴随着光纤及光通信技术发展起来的一种新型传感器技术。它是以光波为传感信号、光纤为传输载体来感知外界环境中的信号&#xff0c;其基本原理是当外界环境参数发生变化时&#xff0c…

【Golang】Go语言编程思想(六):Channel,第二节,使用Channel等待Goroutine结束

使用 Channel 等待任务结束 首先回顾上一节 channel 这一概念介绍时所写的代码&#xff1a; package mainimport ("fmt""time" )func worker(id int, c chan int) {for n : range c {fmt.Printf("Worker %d received %c\n",id, n)} }func crea…

【Windows】【P2P】ipv6 nmap ncat 测试电信、移动、联通两个4G 5G热点ipv6地址的连通性

测试场景 一台PC在电信4G热点下&#xff0c;一台PC在电信5G热点下。 扩展测试 电信、移动、联通的ipv6 下载安装nmap Download the Free Nmap Security Scanner for Linux/Mac/Windows 安装后&#xff0c;进入目录C:\Windows\System32\WindowsPowerShell\v1.0\powershell.e…

一文掌握 OpenGL 几何着色器的使用

学习本文需要具备 OpenGL ES 编程基础,如果看起来比较费劲,可以先看入门文章 OpenGL ES 3.0 从入门到精通系统性学习教程 。 什么是几何着色器 几何着色器(Geometry Shader) OpenGL 管线中的可选着色器阶段,位于顶点着色器(Vertex Shader) 和光栅化阶段 之间。 其核心…

C—初阶调试

对你有帮助的话能否一键三连啊&#xff01;祝每个人心想事成&#xff01; 什么是Bug? 首先我们先了解一下日常口语中的“Bug”是什么 Bug可以理解为计算机程序错误&#xff0c;编程时的漏洞 调试及重要性 顾名思义&#xff0c;调试就是通过工具找出bug存在&#xff0c;找出…

Capacitor 打包后的 iOS app 无法访问 http 的内容,解决办法

Capacitor 打包后的 iOS app 无法访问 http 的内容&#xff0c;解决办法 上篇文章中说了如何使用 Capacitor 打包成 iOS app 的过程中遇到的问题 Capacitor在 xcode 打包 iOS 应用发布的时候出错。 在这之后&#xff0c;遇到了一个新问题&#xff0c; 就是它无法访问 http 的内…

LLaMA Factory+ModelScope实战——使用 Web UI 进行监督微调

LLaMA FactoryModelScope实战——使用 Web UI 进行监督微调 文章原始地址&#xff1a;https://onlyar.site/2024/01/14/NLP-LLaMA-Factory-web-tuning/ 引言 大语言模型微调一直都是一个棘手的问题&#xff0c;不仅因为需要大量的计算资源&#xff0c;而且微调的方法也很多。在…

Excel的文件导入遇到大文件时

Excel的文件导入向导如何把已导入数据排除 入起始行&#xff0c;选择从哪一行开始导入。 比如&#xff0c;前两行已经导入了&#xff0c;第二次导入的时候排除前两行&#xff0c;从第三行开始&#xff0c;就将导入起始行设置为3即可&#xff0c;且不勾选含标题行。 但遇到大文…

【C++】选择排 序算法分析与扩展

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;代码回顾&#x1f4af;选择排序的算法流程&#x1f4af;代码详解外层循环初始化最小值内层循环比较与更新元素交换 &#x1f4af;选择排序的特性时间复杂度空间复杂度稳定性…

顺序表(数据结构初阶)

文章目录 顺序表一&#xff1a;线性表1.1概念&#xff1a; 二&#xff1a;顺序表2.1概念与结构&#xff1a;2.2分类&#xff1a;2.2.1静态顺序表2.2.2动态顺序表 2.3动态顺序表的实现声明&#xff08;初始化&#xff09;检查空间容量尾插头插尾删头删查找指定位置之前插入数据指…

【Linux】磁盘结构和文件系统

文章目录 磁盘磁盘的物理结构LBA寻址法抽象管理分区化总结 磁盘 磁盘是计算机存储系统的核心部件之一&#xff0c;主要用于长期存储数据。磁盘的基本概念、物理结构和逻辑组织形式直接影响着其性能和使用效率。 下面的图片是一个磁盘&#xff1a; 磁盘打开之后的结构如下&…

NLP-中文分词

中文分词 1、中文分词研究背景及意义 和大部分西方语言不同&#xff0c;书面汉语的词语之间没有明显的空格标记&#xff0c;句子是以字串的形式出现。因此对中文进行处理的第一步就是进行自动分词&#xff0c;即将字串转变成词串。 比如“中国建筑业呈现新格局”分词后的词串…

【Golang】Go语言编程思想(六):Channel,第三节,使用Channel实现树的遍历

使用 Channel 实现树的遍历 tree 在此处简单回顾一下之前学过的二叉树遍历&#xff0c;首先新建一个名为 tree 的目录&#xff0c;并在其下对文件和子目录进行如下组织&#xff1a; 其中 node.go 存放的是 Node 的定义&#xff1a; package treeimport "fmt"type…

spring 源码分析

1 IOC 源码解析 BeanDefinition: bean的定义。里面会有beanClass、beanName、scope等属性 beanClass&#xff1a;通过Class.forName生成的Class 对象beanName&#xff1a;context.getBean(“account”)&#xff0c;acount就是beanNamescope: 作用区分单例bean、原型bean Bea…

快速搭建SpringBoot3+Vue3+ElementPlus管理系统

快速搭建SpringBoot3Vue3管理系统 前端项目搭建&#xff08;默认开发环境&#xff1a;node20,Jdk17&#xff09;创建项目并下载依赖--执行以下命令 前端项目搭建&#xff08;默认开发环境&#xff1a;node20,Jdk17&#xff09; 创建项目并下载依赖–执行以下命令 创建项目 y…

基于Hadoop大数据音乐推荐系统的设计与实现

摘 要 各种主流的音乐平台都为用户提供了的大量的音乐&#xff0c;让他们时刻都能沉浸在音乐的海洋之中。然而&#xff0c;过多的音乐往往使用户眼花缭乱&#xff0c;很难发现他们真正所需要的。一套优秀的推荐系统&#xff0c;可以很好地解决这个问题&#xff0c;既能帮助用户…

IDEA遇到EasyConnect中的网络资源无法访问的问题

IDEA遇到EasyConnect中的网络资源无法访问的问题 摘要由CSDN通过智能技术生成 点击编辑IDEA的 启动配置&#xff0c;然后在启动器下面的新增一个请求参数然后重新启动项目&#xff0c; java.net.preferIPv4Stack true IDEA就能连接到EasyConnect代理的网络服务 wanshanyu_ 关…

IP研究 | 大数据洞察黄油小熊的爆火之路

一只来自泰国的小熊在国内红成了顶流。 今年&#xff0c;黄油小熊以烘焙店“打工人”的超萌形象迅速走红&#xff0c;2个月内火遍中国的社交媒体&#xff0c;泰国门店挤满飘洋过海求合影的中国粉丝&#xff0c;根据数说故事全网大数据洞察&#xff0c;黄油小熊2024年度的线上声…