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;
    }
};

TensorRT(C++)部署 Pytorch模型 众所周知,python训练pytorch模型得到.pt模型。但在实际项目应用中,特别是嵌入式端部署时,受限于语言、硬件算力等因素,往往需要优化部署,而tensorRT是最常用的一种方式。本文以yolov5的部署为例,说明模型部署在x86架构上的电脑端的流程。(部署在Arm架构的嵌入式端的流程类似)。 阅读详情

相关推荐

部署资源管理系统chemx

资源管理系统的部署教程

weixin_40784215的博客 822

leetCode-32: 最长有效括号

leetCode-32: 最长有效括号

jiaomubai的博客 1049

【MATLAB/Simulink】从模型到飞行:基于PX4与Rflysim的无人机MBD实战指南

本文详细介绍了基于MATLAB/Simulink与PX4、Rflysim的无人机模型开发与飞行控制实战指南。通过MBD(基于模型设计)方法,从建模、仿真到代码生成与硬件部署,实现无人机开发的高效闭环。文章涵盖开发环境搭建、动力学建模、控制算法实现及测试验证全流程,为无人机开发者提供实用技巧与优化建议。

weixin_30181209的博客 410

LeetCode - 最长有效括号

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

qq_34599349的博客 1283

opencv 常用函数总结

本文是一份OpenCV图像处理的常用函数总结,详细介绍了图像的读入、显示、保存、像素处理、图像属性获取、基础操作、阈值处理、图像平滑、形态学转换以及直方图处理等关键技术。文章通过代码示例和参数说明,帮助读者快速掌握OpenCV在图像处理领域的应用。

weixin_44063529的博客 1598

一、Abaqus CAE 入门操作(薄膜应力计算)

一、Abaqus CAE 入门操作(薄膜应力计算)

A20802013的博客 4368

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

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

zik的博客 920

车辆动力学仿真模型的可信度评估方法

以转向工况测试为例,实车采集的方向盘转角作为车辆动力学模型的输入,记录车辆动力学模型的横摆角速度的输出结果,计算横摆角速度的幅频特性,根据《GB/T 6323-2014 转向盘角脉冲试验》的方法,获取横摆角速度峰值、横摆角速度谐振峰频率、横摆角速度谐振峰水平,与采集的实车结果对比,并计算车辆动力学模型和实车对于关键对比参数的相对误差。由公式(2)计算可得,在制动工况和转向工况测试下,车辆动力学模型和实车的纵向车速、制动减速度、制动距离、横摆角速度基本一致,精度> 85%,具有较好的精度。

wangchen900705的博客 1958

32最长有效括号(栈)

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

Revendell的博客 286

目标检测中的困难样本挖掘:YOLOv5训练效果提升30%的秘诀

本文深入探讨了目标检测中困难样本挖掘的关键技术,特别是如何通过在线困难样本挖掘(OHEM)策略显著提升YOLOv5模型的性能。文章详细解析了困难样本的分类、识别机制及实战配置,并提供了数据标注策略与增强技巧,最终实现模型性能提升30%的突破。

weixin_30379531的博客 401

Opencv计算相机响应函数(Camera Response Function)与Radiance

本文主要用于记录自己在学习CRF过程中遇到的一些问题。 CRF模型 I=f(V(t⋅L))I=f(V( t\cdot L))I=f(V(t⋅L)) 其中III为相机灰度值Intensity,LLL为环境中irradiance,ttt为曝光时间,VVV为相机镜头参数,fff为相机响应函数CRF。 有些论文中认为相机镜头参数是线性的不考虑,但有些考虑了衰减即靠近图像边缘亮度会暗一些,但没有看到二者同时计算的,如果同时计算两个非线性的函数,我觉得可能会有不确定性,在这里还请教一下了解的朋友。 控制

larrydong的博客 5999

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

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

qq_48885546的博客 275

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

leetcode刷题记录

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

m0_71235225的博客 918

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

LeetCode 最长有效括号

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

weixin_40856541的博客 284

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

leetcode-32. 最长有效括号

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

曼巴的博客 556

【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)——最长有效括号

最长有效括号题目描述方法一:栈思路代码复杂度分析方法二:动态规划思路代码复杂度分析方法三:无需额外空间思路代码复杂度分析 题目描述 给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。 示例 1: 输入: “(()” 输出: 2 解释: 最长有效括号子串为 “()” 示例 2: 输入: “)()())” 输出: 4 解释: 最长有效括号子串为 “()()” 示例 3: 输入: “())((())” 输出: 4 解释: 最长有效括号子串为 “(())” 方法一:栈 思路 始终保持

qq_41230076的博客 3425
上一篇: 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、付费专栏及课程。

余额充值