【算法】Longest Valid Parentheses 最长有效括号

工程师必读一次性讲明白系列(十三)眼图、阻抗匹配、信号一致性、射频匹配、电磁感应 概念主要作用影响因素解决方法眼图评估信号质量,显示失真和噪声噪声、信号失真、时序抖动改善信号源、使用低噪声组件阻抗匹配避免信号反射,提高传输效率阻抗不匹配、传输线路特性使用匹配电路、适配器信号一致性保证信号稳定准确传输传输线路、噪声干扰使用屏蔽、滤波器,选择合适线路射频匹配确保射频信号高效传输天线设计、阻抗不匹配使用射频匹配器、调整天线设计电磁感应防止电磁干扰对信号的影响设备之间的电磁干扰(EMI)屏蔽、接地、滤波器。 阅读详情

【算法】Longest Valid Parentheses 最长有效括号

题目

Given a string containing just the characters ‘(’ and ‘)’, find the length of the longest valid (well-formed) parentheses substring.

Example 1:

Input: "(()"
Output: 2
Explanation: The longest valid parentheses substring is "()"

Example 2:

Input: ")()())"
Output: 4
Explanation: The longest valid parentheses substring is "()()"

给出一个只含有 “(”、")" 的字符串,寻找字符串中最长的有效括号的长度。

解题思路

这里就需要分析一下 “()” 的特性了:

  1. “()” 的长度为 2
  2. ”()“ 左右位置若存在有效括号,则可以进行拼接
  3. “()” 若有效,且其中间位置存在字符,则中间的字符串也一定为有效括号

依据这三点特性,可以考虑如下思路来寻找最长括号:

  1. 从左到右遍历字符串,找到有效的括号,并计算其本身的长度
    • 以找到 “)” 为 当前标识 ,再寻找与其匹配的 “(”,若找到则为有效括号
    • 假设当前有效括号中间含有有效括号M,寻找与其匹配的 “(”
      • 找到当前字符 “)” 的位置为 i ,每个有效括号的当前最长长度存进 max[i],
      • 当前位置 i 左移到 有效括号M 的左侧( 左移 max[i-1] + 1 位),即为当前有效括号的 “(” 的位置 j = i - 1 - max[i-1]
      • 当且仅当位置 j 的字符存在且为 “(” 时,当前有效括号的假设才成功,当前有效括号的长度为当前左右括号长度 2 加上 有效括号M 的长度 max[i-1],( 2 + max[i-1])
  2. 由于是从左到右遍历,所以若左边位置为有效括号(有效括号L),计算最长长度时,需要加上 有效括号L 的长度 max[j-1]
  3. 计算完 max[i] 与结果容器 res 做较大值比较,赋较大值给 res
  4. 遍历结束,返回 res 即为最长有效括号的长度

PS: 有效括号M 若存在,其长度为 max[i-1] 有值, 有效括号M 若不存在 max[i-1] 为 0,若 当前有效括号 中间位置没有字符时,i-1 位置为 “(”,其在max的值max[i-1]也为 0 ,所以 当前有效括号 中间没有字符时的长度计算方式和 有效括号M 不存在时的计算方式是一致的,用 j = i - 1 - max[i-1] 寻找匹配 “(” 的方式可以同时解决。

代码实现

Runtime: 12 ms
Memory: 20.9 MB

func longestValidParentheses(_ s: String) -> Int {
        let len = s.count
        // 长度小于 2 的时候,成不了一组 () 所以返回 0
        if len < 2 {
            return 0
        }
        // 将 s 转换成数组,方便操作
        let s = Array(s)
        // max 数组 记录当前有效括号最大长度
        var max = Array(repeating: 0, count: len)
        // res 作为结果
        var res = 0
        // 从 1 开始遍历 s
        for i in 1 ..< len {
            // 只有当前字符为 ")" 时,才有可能出现有效括号
            if s[i] == ")" {
                // 用 i 减去 max[i-1] 的中间位置有效括号长度,再减去当前字符长度 1,即为与当前有效括号的 ( 的位置 j
                let j = i - 1 - max[i-1];
                // 只有当 j >= 0,并且 s[j] 为 ( 时,有效括号才匹配
                if j >= 0 && s[j] == "(" {
                    //有效括号匹配,更新 max[i] 的值,当前成对括号长度 2 ,中间位置有效括号长度 max[i-1],左侧有效括号长度 max[j-1],加和在一起
                    max[i] = 2 + max[i-1] + (j > 1 ? max[j-1] : 0)
                    //更新较大值到 res
                    res = max[i] > res ? max[i] : res
                }
            }
        }
        return res
    }

代码地址:https://github.com/sinianshou/EGSwiftLearning

SIMULINK开发项目实例 1000 例专栏之第912例--AC-DC整流器场景:基于PWM整流器拓扑结构的建模:三相电压型PWM整流器(SR)单位功率因数控制仿真 本文详细介绍了使用Simulink和Simscape Electrical搭建三相电压型PWM整流器(VSR)模型的方法。主要内容包括:系统结构设计、主电路拓扑搭建、单位功率因数控制算法实现(含PLL锁相环、dq变换、PI控制器等模块)、参数配置和仿真设置。通过仿真分析验证了该系统能实现输入电流与电压同相位、输出直流电压稳定等特性,体现了PWM整流器的高效性和低谐波优势。文章还提出了增强鲁棒性、多工况测试等优化建议,为电力电子系统设计提供了实用指导。该建模方法对新能源发电、电动汽车充电等领域具有重要意义。 阅读详情

相关推荐

HybridCLR热更新打包报错全解析:从原理到实战解决方案

热更新技术是现代游戏和应用开发中实现动态内容交付与Bug修复的核心机制,它允许开发者在无需重新发布完整应用的情况下更新代码逻辑。其原理通常涉及在运行时加载并执行新的代码模块,这要求框架在底层实现安全的代码隔离、内存管理与元数据桥接。在Unity生态中,HybridCLR作为基于IL2CPP的高性能热更新解决方案,通过补充元数据和AOT泛型引用技术,实现了对C#代码的原生级热更支持,显著提升了开发迭代效率与线上问题修复能力。然而,在实际的工程实践中,尤其是在面向Android、iOS等多平台打包构建时,开发者

weixin_29017445的博客 308

Longest Valid Parentheses(最长有效括号)

Given a string containing just the characters'('and')', find the length of the longest valid (well-formed) parentheses substring. Example 1: Input: "(()" Output: 2 Explanation: The longest valid parentheses substring is "()" Example 2: Input: ")()...

Heliumfly的博客 358

CLion与STM32CubeMX联调:JLink GDB Server高效调试指南

本文详细介绍了如何搭建并配置CLion、STM32CubeMX与JLink GDB Server联调的现代化STM32开发环境。通过一站式环境搭建、工程创建、核心调试配置及高级技巧(如RTT日志),该组合实现了高效的代码编辑、可视化配置与稳定调试,大幅提升嵌入式开发效率与体验。

web99的专栏 258

LeetCode 32. Longest Valid Parentheses

Problem Find the longest valid substring. Algorithm Use a stack to find matching parenthes and combinate the sustring during the process. The value save in the stack is the valid substring. Code class...

小白菜又菜 191

新手如何学习车载底层嵌入式软件开发(AutoSar)

汽车嵌入式开发

ACarSoft的博客 4219

FPGA学习之路—应用程序—原码二位乘法器及Verilog代码分析

FPGA学习之路——原码二位乘法器及Verilog代码分析 原理 原码乘法可以分为原码一位乘和原码二位乘,两者在实现规则上大同小异。原码一位乘每次判断乘数的最低位,对被乘数和部分积进行相应操作。而原码二位乘则是对乘数的低二位进行判断,并执行相关操作。 两位乘数的取值可以有四种可能组合,每种组合对应于以下操作: 00相当于0x,部分积Dresult右移2位,不进行其他运算; 01相当于1x,部分积D...

谦豫 3715

Leetcode 32 Longest Valid Parentheses DP好题

就喜欢做这种想法题, 一开始的想法和之前做过的一道括号匹配差不多,用栈。 记录未匹配的括号位置,然后两两相减找到最大值,过了,但速度并不快。 在discuss中看到有人用DP,恍然大悟! dp[i]表示以当前位置为终点的最长长度,则只能在)处更新, 如果s[i-1-dp[i-1]]=='(',则说明当前位置可以和i-1-dp[i-1]位置匹配,dp[i]=dp[i-1]+2; 然后还要加上匹配位置之前的最长长度dp[i]+=dp[i-dp[i]];

无名山丘,崛起成峰 4093

Unity2018连接MySQL数据库

当前在做的一个Unity项目需要连接到MySQL数据库,弄了一整天,排了很多错,终于在Unity上成功连接到MySQL数据库了,所以分享一下,避免有这个需求的朋友不用花那么多时间。 我使用的软件是 Unity20184.0f1 + mysql-8.0.24 导入 MySql.Data.dll 首先需要把 MySql.Data.dll 导入到Assets/Plugins 这个dll需要安装Connector/NET,在安装目录\Assemblies\v4.0中拿到,最好不要下载版本太高的,版本太高导入的时候

ZLX的博客 9449

算法:Longest Valid Parentheses(最长有效的括号)

说明 算法:Longest Valid Parentheses LeetCode地址:https://leetcode.com/problems/longest-valid-parentheses/ 题目: Given a string containing just the characters ‘(’ and ‘)’, find the length of the longest valid ...

AI架构师易筋 580

LAMMPS实操系列(一): 大量FCC-CoCrCuFeNi高熵合金建模与最稳定结构筛选

高熵合金(High-entropy alloys,HEA),是由五种或五种以上等量或大约等量金属形成的合金。由于高熵合金可能具有许多优秀的物理化学性质,因此在材料科学领域受到广泛关注

Ceshigo_CD的博客 3257

锐捷-GZ073 网络系统管理赛项赛题第1套A模块-S5配置

锐捷-GZ073 网络系统管理赛项赛题第1套A模块-S5配置

weixin_46183247的博客 767

每日一道算法题LeetCode32:Longest Valid Parentheses(最长有效括号)

最长有效括号题目分析题解栈总结 题目 给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。 分析 挺难的一道题,我想到了动态规划,想到了栈,但是一个都没有做出来。。有太多的点需要注意了,栈还是比较好理解的。 题解 栈 初始化一个栈,遇到做括号就将下标入栈,遇到右括号就弹栈。 如果弹栈之后栈为空,就将当前下表入栈。 如果弹栈之后下表不为空,更新结果。 注意要在最开始入栈一个 -1,比如“ () ”,没有入栈一个-1的话,结果就是0。 public static int

Alan0_0的博客 303

OV5645摄像头原理图设计,已量产

在嵌入式视觉项目里,摄像头小板真正决定量产稳定性的,往往不是把传感器接出来这件事本身,而是电源域有没有拆清、参考时钟够不够干净、主板调试时有没有留出可落地的接口。ATK-MC5645 这张原理图的价值,就在于它没有把 OV5645 裸接到一排连接器上,而是把 AFVDD_2V8、DOVDD_1V8、DVDD_1V5、24MHz 时钟和 MIPI/控制信号都收敛在一块独立模组上。

不脱发的程序猿 328

【LeetCode-面试算法经典-Java实现】【032-Longest Valid Parentheses(最长有效括号)】

【032-Longest Valid Parentheses(最长有效括号)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses su

https://github.com/Wang-Jun-Chao 4032

NTscan扫描工具

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

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

LeetCode算法入门- Longest Valid Parentheses -day12

LeetCode算法入门- Longest Valid Parentheses -day12 Given a string containing just the characters ‘(’ and ‘)’, find the length of the longest valid (well-formed) parentheses substring. 题目描述: 题目的意思是给定一个括号序列...

hongjie_lin 283

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

leetcode 32. Longest Valid Parentheses 84. Largest Rectangle in Histogram (栈的艺术)

32. Longest Valid Parentheses Given a string containing just the characters ‘(’ and ‘)’, find the length of the longest valid (well-formed) parentheses substring. Example 1: Input: "(()" Output: 2 Explanation: The longest valid parentheses substring is "()

机器学习,数据挖掘算法爱好者 175

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Leetcode Practice(0801)

Leetcode practice

Owen_5的博客 207

LeetCode_32、53两题(动态规划)

LeetCode_32. Longest Valid Parentheses 原题: Given a string containing just the characters ‘(’ and ‘)’, find the length of the longest valid (well-formed) parentheses substring. For “(()”, the longest

qq_32453517的博客 460

括号匹配问题

32. Longest Valid Parentheses   Question Editorial Solution

simple008的博客 294

动态规划 Leetcode 32 Longest Valid Parentheses(最长有效括号)

题目 给定一个只包含'('和')'的字符串,找出最长的包含有效括号的子串的长度。 示例1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为"()" 示例2: 输入: ")()())" 输出: 4 解释: 最长有效括号子串为"()()" 链接(中文版):https://leetcode-cn.com/problems/longest-valid-parentheses 链接(英文版):https://leetcode.com/problems/longest-...

weixin_39228381的博客 4343

Longest Valid Parentheses 最长有效括号

给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。 示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()" 示例 2: 输入: ")()())" 输出: 4 解释: 最长有效括号子串为 "()()" 思路: 方法一:使用栈(stack)来做,基本思想是匹配"("和")",互相相消 { 如果栈顶是“(”且下一个元素是&

qq_26410101的博客 281

Leetcode 32. Longest Valid Parentheses 最长有效括号

Leetcode 32. Longest Valid Parentheses 最长有效括号 标签: Leetcode 题目地址: https://leetcode-cn.com/problems/longest-valid-parentheses/ 题目描述 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。 示例 1: 输入: "(...

CoderWangSon 373

32. Longest Valid Parentheses 最长有效括号

Title 给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。 示例 1: 输入: “(()” 输出: 2 解释: 最长有效括号子串为 “()” 示例 2: 输入: “)()())” 输出: 4 解释: 最长有效括号子串为 “()()” 栈 Solve 括号匹配问题,第一个想到的数据结构就是栈,考虑到边界情况,要保持栈底元素为当前已经遍历过的元素中最后一个没有被匹配的右括号的下标,初始情况放入-1,栈里其他元素维护左括号的下标。 具体过程: 如果遇到左括号,将其下标放入栈中

Alex 611

Leetcode刷题记——32. Longest Valid Parentheses(最长有效括号)

一、题目叙述: Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring. For "(()", the long

爱胡椒的小白兔呢 691

LeetCode第32题思悟——最长有效括号(longest-valid-parentheses)

LeetCode第32题思悟——最长有效括号(longest-valid-parentheses) 知识点预告 栈的使用方法; 长度的计算方法; 数组的妙用; 题目要求 给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-valid-pare...

博采众长,自成一派; 540

LeetCode OJ 之 Longest Valid Parentheses (最长有效括号)

题目: Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring. For "(()", the longest valid parentheses substring is

灯火阑珊处 571
上一篇: 【算法】Create Maximum Number 创建最大数
下一篇: 【算法】Best Time to Buy and Sell Stock IV 交易股票嘴角时机4
无良剑染
博客等级 码龄11年 3粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值