Leetcode(32)最长有效括号-——传统栈解法&左右计数器

【leetcode热题100】最长有效括号 给你一个只包含'('和')'的字符串,找出最长有效(格式正确且连续)括号子串的长度。s = "(()"2最长有效括号子串是 "()"4最长有效括号子串是 "()()"s = ""0。 阅读详情

题目描述
给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。

示例 1:
输入: “(()”
输出: 2
解释: 最长有效括号子串为 “()”

示例 2:
输入: “)()())”
输出: 4
解释: 最长有效括号子串为 “()()”

思路1

看到括号匹配类题首先想到使用栈,跟栈的经典用法(表达式计算)类似,把左括号的下标入栈。
为了计算长度,首先放入-1,遇到左括号入栈。当遇到右括号的时候,出栈,栈空时把右括号的下标放入(重新设立起点)。栈不空时,更新最大长度。

代码
class Solution {
public:
    int longestValidParentheses(string s) {
        stack<int> S;
        S.push(-1);
        int MaxL = 0;
        for(int i = 0;i < s.length();++i){
            if(s[i] == '(')S.push(i);
            else{
                    S.pop();
                    if(S.empty())S.push(i);
                    else{

                    MaxL = max(MaxL,i - S.top());
                    }
        }
    }
    return MaxL;
    }
};

思路2

使用左右两个计数器,分别记录左右括号数,当右括号数大于左括号时,两个同时清空。相等时更新最大长度。
反过来做一遍类似过程。(此时左括号数大于右括号时清零)
(和leetcode(22)括号生成的回溯解法类似,递归过程中,通过左括号和右括号的个数判断是否还可以组成有效的括号的组合。)

代码
class Solution {
public:
    int longestValidParentheses(string s) {  
         if(s.size() == 0)return 0;
         int left = 0;
         int right = 0;
         int MaxL = 0;
         for(int i = 0;i < s.length();++i){
                if(s[i] == '(') left ++;
                if(s[i] == ')')right++;
                if(left == right) MaxL = max(MaxL,left*2);
            if(right > left){
                right = 0;
                left = 0;
            }

         }
         //反向再做一遍,比如“ )()) ”的情况,从左到右遍历的过程是求不出最大长度的
          left = 0;
          right = 0;
         for(int i = s.length() - 1;i >= 0;--i){
                if(s[i] == '(') left ++;
                if(s[i] == ')')right++;
                if(left == right) MaxL = max(MaxL,left*2);
            if(right < left){
                right = 0;
                left = 0;
            }

         }
         return MaxL;
    }
};

基于FastLIO2与TEB算法的机器狗自主导航系统实战 本文详细介绍了如何为机器狗构建一套基于FastLIO2与TEB算法的自主导航系统。通过整合FastLIO2激光惯性里程计实现精准定位,并采用TEB局部规划器进行灵活路径规划与动态避障,解决了传统方案在复杂地形下反应慢、易碰撞的问题。文章提供了从环境搭建、算法部署、地图转换到系统调试的完整实战指南,帮助开发者实现机器狗的稳健自主行走。 阅读详情

相关推荐

从零到英雄:如何用FPGA和AD9288打造你的第一台便携式示波器

本文详细介绍了如何利用FPGA和AD9288 ADC芯片从零开始打造一台高性能便携式示波器。通过硬件架构设计、高速数据采集系统实现及信号处理与显示系统的开发,读者可以掌握400Msps采样率的实现方法,并了解关键器件选型与系统优化技巧。

jjj34的博客 277

leetCode-32: 最长有效括号

leetCode-32: 最长有效括号

jiaomubai的博客 1049

企业华为TaurusDB数据库国产替代要点全记录

国产化数据库全方位对比、从互联网企业的先进经验来看mysql的用法、及sql优化、sql异构修改、及数据同步方面都做了一些讲解

深耕互联网的码农,在AI及国产化浪潮下,希望把自己的能力输出给更多的人 1063

LeetCode - 最长有效括号

题目描述 给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。 示例 示例 1: 输入: “(()” 输出: 2 解释: 最长有效括号子串为 “()” 示例 2: 输入: “)()())” 输出: 4 解释: 最长有效括号子串为 “()()” 方法一:栈 思路 1、栈用来保存读取到的括号的下标,而不是括号字符。初始时为了统一现在栈底将-1入栈,以便第一个遇到右括号与之后遇到的情况保持统一的处理 2、保持栈底元素为最后一个没有被匹配的右括号下标(初始是-1,一但-1出栈,之后栈底

qq_34599349的博客 1283

Xilinx GTY Transceiver时钟方案与功耗优化实践

本文详细解析了Xilinx GTY Transceiver的时钟方案设计与功耗优化实践,涵盖从基础配置到高速24.33024Gbps和中速10.1376Gbps的实战案例。通过Transceivers Wizard的IP设计技巧和动态功耗优化方法,帮助工程师有效降低FPGA系统功耗,提升高速串行通信的稳定性与效率。

weixin_28736355的博客 228

基于Java的高校学生信息管理系统的设计与实现(论文+源码)

可以对本系统的数据进行良好的封装,Java可以对不想被访问的数据进行良好的隐藏,具备平台无关性,可移植,更加可靠与安全,具备多线程支持,进行网络交互更容易。它支持本系统的B/S模式。开发效益方面,本系统一旦开发成功并且面向社会,就会让大多数的学生教师体会到便利办公的乐趣,随之促进提高本系统的使用率和经济利润,所以在经济方面,对于零成本开发且高利润的学生管理系统是可行的。学生可以在学生端进行选课,查看自己的成绩,教师可以在教师端查看所任课程的选课情况,对学生成绩进行录入,对所任的课程进行结课等操作。

2402_82389843的博客 1091

LeetCode-32. 最长有效括号【栈 字符串 动态规划】

在遍历过程中,只要有两个连续索引对应字符可以构成一对括号就出栈,这样栈中存储的都是到当前位置暂时不可以构成括号的索引。当前字符s[i]将会是栈中第一个字符,无法跟之前的字符构成一对括号。其实也就是栈顶元素必须为’(‘,当前字符s[i]必须为’)',这样才能构成一对括号。因为此时栈可能为空,如果为空就是res = max(res, i - (-1))当前有效括号的长度 = 当前索引i - 栈顶存储的索引stack[-1]解释:最长有效括号子串是 “()()”输入:s = “)()())”时间复杂度:O(n)

zik的博客 920

Ubuntu下Charm-Crypto安装

经过一下午的努力终于是把Charm-Crypto给安上了,经过查询资料,大致有三种方案(两坑一可行)。 适用于我的电脑的是Ubuntu 18.04版本。 第一种方案是根据连接https://pypi.org/project/charm-crypto/的教程进行安装,但是该方案的优势在于下载快速,缺陷在于Ubuntu系统仅仅更新到13+版本。 第二种就是网络博客上的介绍,内容与第一种较类似,但是有16+,18+成功的例子,缺点就是bug太多,我大部分时间都耗在了这上边,而且还没有成功。 第三中是github上

Mr.Yi的博客 2284

32最长有效括号(栈)

1、题目描述 给定一个只包含'('和')'的字符串,找出最长的包含有效括号的子串的长度。 2、示例 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()" 输入: ")(()())" 输出: 6 解释: 最长有效括号子串为"(()())" 3、题解 基本思想:采用栈的思想,遇到'('则入栈,遇到')'如果栈顶为'('则出栈,记录字符长度counter++,...

Revendell的博客 286

【超详细】基于YOLOv8的PCB缺陷检测

印刷电路板(PCB)瑕疵数据集:是一个公共的合成PCB数据集,由北京大学发布,其中包含1386张图像以及6种缺陷(缺失孔,鼠标咬伤,开路,短路,杂散,伪铜),用于检测,分类和配准任务。本文我们选取了其中适用与检测任务的693张图像,随机选择593张图像作为训练集,100张图像作为验证集。

weixin_45679938的博客 2万+

机器学习算法原理:详细介绍各种机器学习算法的原理、优缺点和适用场景

现在,我们将进入到机器学习的核心部分——算法原理。在本篇文章中,我们将详细探讨各种机器学习算法的原理、优缺点和适用场景。

a871923942的博客 2965

leetcode刷题日记之最长的有效括号

首先想到的就是所有的合法的有效括号,必然是用到栈的结构,结果直接提交显示失败,这样求的是全部的合法的字符串,而题目要求的是子串的合法的括号的最大长度。这时候采用的另一种入队方式,就是当遇到的(的时候将)括号入队,在出队的时候进行最长长度的更新,就是)括号的下标减去栈顶的元素。

qq_48885546的博客 275

Android 14安装的APK默认允许运行时权限

本文介绍了在Android系统中实现安装应用后自动授予运行时权限的方法。通过在安装完成广播中检测应用安装状态,调用新增的DefaultPermissionGrantPolicy.grantAppRuntimePermissions()函数来授予常规权限,并使用allowSpecialPermission()处理特殊权限(如安装未知应用和悬浮窗权限)。文章详细说明了如何修改DefaultPermissionGrantPolicy类,添加grantAppRuntimePermissions和grantRunti

热衷于Android Framework和系统APP的修改经验分享 683

leetcode刷题记录

对于这道题有两种解法。第一种暴力枚举:时间复杂度O(n^2)空间复杂度O(1)第二种哈希表查找:判断target - 数组元素是否存储在哈希表中,如果不在就将数组元素作为键,数组下标作为索引存入哈希表中,如果在则直接输出相对应的索引下标。

m0_71235225的博客 918

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

LeetCode 最长有效括号

LeetCode 练习题21最长有效括号题目描述解题方法参考题目:参考方法:方法一:改善后代码:方法二: 最长有效括号 题目描述 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。 示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()" 示例 2: 输入: ")()())" 输出: 4 解释: 最长有效括号子串为 "()()" 解题...

weixin_40856541的博客 284

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

leetcode-32. 最长有效括号

1)遍历字符串,如果是左括号,就直接入栈;如果是右括号且栈里已经有括号了,说明已经有成对的括号出现了;将栈的顶部括号pop出来,当前的也放入res数组里。的字符串,找出最长有效(格式正确且连续)括号。3)接下来,在res数组里,找到最长的。最长有效括号子串是"()()"最长有效括号子串是"()"一般括号问题都需要一个辅助栈。2)对res数组进行排序。

曼巴的博客 556

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【leetcode】栈-最长有效括号

题目: 给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 示例 1: 输入:s = “(()” 输出:2 解释:最长有效括号子串是 “()” 示例 2: 输入:s = “)()())” 输出:4 解释:最长有效括号子串是 “()()” 示例 3: 输入:s = “” 输出:0 提示: 0 &lt;= s.length &lt;= 3 * 104 s[i] 为 ‘(’ 或 ‘)’ 看到这种题目 优先想到了栈的输出,但学艺不精,刚开始挺多算法步骤写错,

码农研究僧的博客 412

LeetCode最长有效括号

LeetCode: Longest Valid Parentheses 问题描述 Given a string containing just the characters ‘(’ and ‘)’, find the length of the longest valid (well-formed) parentheses substring. Example1 Input: s = “(()” Output: 2 Explanation: The longest valid parentheses su

weixin_44260108的博客 842

LeetCode题练习与总结:最长有效括号

在本文中,我们探讨了如何使用栈来解决寻找最长有效括号子串的问题。通过初始化栈并遍历字符串,我们能够在遇到右括号时找到匹配的左括号,并更新最长子串长度。这种方法的时间复杂度为O(n),空间复杂度同样为O(n)。我们详细讨论了栈的操作、条件判断、变量更新以及边界条件处理等关键知识点。

一直学习永不止步 1034

【算法训练-栈 一】【结构特性】有效的括号、最长有效括号

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【栈的使用】,使用【栈】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为:目标公司+最近一年+出现频率排序,由高到低的去牛客TOP101去找,只有两个地方都出现过才做这道题(CodeTop本身汇聚了LeetCode的来源),确保刷的题都是高频要面试考的题。 名曲目标题后,附上题目链接,后期可以依据解题思路反复快速练习,题目按照题干的基本数据结构分类,且每个分类的第一篇必定是对基础数据结构的介绍。非常适

MaoLin Tian's Blog 353

【7.9】栈结构-最长有效括号

给你一个只包含'('和')'的字符串,找出最长有效(格式正确且连续)括号子串的长度。s = "(()"2最长有效括号子串是 "()"4最长有效括号子串是 "()()"s = ""0'('')'二、解题思路要解决这个问题,我们可以使用栈来辅助判断括号的匹配情况。使用一个栈来存储括号的下标。将栈底初始化为-1,用于处理边界情况。遍历字符串中的每个字符:如果遇到'(',将其下标压入栈中。如果遇到')',弹出栈顶元素:如果栈为空,说明当前的')'没有匹配的'('

攻城狮7号的博客 364

【栈】LeetCode-32. 最长有效括号

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

xiaoxiawancsdn的博客 642

【LeetCode 热题 100】32. 最长有效括号——(解法一)栈

这段代码旨在解决一个经典的字符串与栈相关的问题:最长有效括号 (Longest Valid Parentheses)。问题要求在一个只包含 和 的字符串中,找到最长的有效(格式正确)括号子串的长度。该算法采用了一种非常巧妙的 栈 (Stack) 结合 边界标记 的方法。它通过一次遍历,动态地计算以当前字符为结尾的有效括号子串的长度。算法的核心思想是:一个有效的括号子串,其长度等于当前右括号的索引减去它所匹配的左括号之前那个“无效”位置的索引。栈被用来追踪这些边界。栈的作用:算法步骤:返回结果: 时空复杂

最短的捷径就是绕远路,绕远路才是我的最短捷径。 944

LeetCode32-最长有效括号

LeetCode32-最长有效括号 Leetcode / 力扣 32. 最长有效括号: 给你一个只包含'('和 ')'的字符串,找出最长有效(格式正确且连续)括号子串的长度。 示例 1: 输入:s = "(()" 输出:2 解释:最长有效括号子串是 "()" 示例 2: 输入:s = ")()())" 输出:4 解释:最长有效括号子串是 "()()" 示例 3: 输入:s = "" 输出:0 提示: 0 &lt;= s.length &lt;= 3 * 10^4 s[i] 为 ‘(’ 或 ‘)

baodream的博客 879

LeetCode最长有效括号问题解

在这里,方法无非是我们使用堆栈,当我们遇到开头支撑时,我们将其索引推入堆栈中,每当我们触摸闭合支架时,我们就会看到堆栈的顶部,如果它的大小是一个,则意味着闭合括号已经统治了开头括号。然后,我们将堆栈的最高值编辑为闭合支架的索引。说明:最长的有效括号子字符串是 “()()”。说明:最长的有效括号子字符串是 “()”。s[i] 是 ‘(’, 或者 ‘)’。如下所示,图片清楚地描绘了此方法。输入:s = “)()())”输入:s = “(()”

琴歌声声送我的博客 609

力扣---最长有效括号---动态规划,栈

动态规划,栈

sweet_Mary的博客 765
上一篇: Leetcode(23)合并K个排序链表——k个元素的排序
下一篇: Leetcode(33)搜索旋转排序数组——二分法
softwareX4
博客等级 码龄9年 21粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值