
32 最长有效括号(递归、栈)
初始化栈:将栈初始化为一个包含-1的元素。这个-1用来记录初始位置,以便计算有效括号对的长度。 遍历字符串:逐个字符遍历字符串。
发布日期:2021-05-07 21:50:03
浏览次数:24
分类:精选文章
本文共 1271 字,大约阅读时间需要 4 分钟。
为了解决这个问题,我们需要找到给定只包含 '(' 和 ')' 的字符串中最长的有效括号子串的长度。有效括号子串指的是括号对正确匹配且连贯的子串。
方法思路
我们可以使用栈来解决这个问题。栈在处理括号匹配问题上非常有效。具体步骤如下:
- 当遇到 '(' 时,将其压入栈。
- 当遇到 ')' 时,弹出栈顶元素。如果弹出后栈为空,说明当前字符无法形成有效的括号对,因此将当前位置压入栈。
- 如果栈不为空,计算当前位置与栈顶元素的差值,更新最大有效括号长度。
这种方法确保在遇到每个可能的括号对时,能够正确计算其长度,并更新最大值。
解决代码
import java.util.Stack;public class Solution { public int longestValidParentheses(String s) { int maxAns = 0; Stackstack = new Stack<>(); stack.push(-1); // 初始化栈,用于计算有效括号长度 for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (c == '(') { stack.push(i); } else { stack.pop(); if (stack.isEmpty()) { stack.push(i); } else { int currentLength = i - stack.peek(); if (currentLength > maxAns) { maxAns = currentLength; } } } } return maxAns; }}
代码解释
- 栈初始化:栈中初始存储-1,用于计算有效括号对的起始位置。
- 遍历字符串:逐个字符处理。
- 遇到 '(',压入栈,记录当前位置。
- 遇到 ')',弹出栈顶元素。若栈为空,说明当前字符无法形成有效括号对,记录当前位置。否则,计算当前位置与栈顶元素的差值,更新最大有效括号长度。
- 返回结果:遍历结束后,返回最大有效括号长度。
这种方法高效且简洁,能够在 O(n) 时间复杂度内解决问题,适用于较长的字符串。
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年03月30日 19时56分16秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
修复搜狗、360等浏览器不识别SameSite=None 引起的单点登录故障
2019-03-05
明天要早起,今天不博了。
2019-03-05
2017/08/21 工作日志
2019-03-05
EXTJS4.2——10.Tab+Iframe
2019-03-05
EXTJS4.2——3.1 添加文本框
2019-03-05
WEB基础——AJAX
2019-03-05
one + two = 3
2019-03-05
Kali Day01 --- arpspoof命令进行断网攻击(ARP欺骗)
2019-03-05
echart关系图平分节点删除时自动平衡问题
2019-03-05
【Coursera】Internet History 读书笔记
2019-03-05
《ODAY安全:软件漏洞分析技术》学习心得-----shellcode的一点小小的思考
2019-03-05
Decision tree(决策树)算法初探
2019-03-05
《Unity3D/2D游戏开发从0到1(第二版本)》 书稿完结总结
2019-03-05
sctf_2019_easy_heap
2019-03-06
AT 杂题泛做
2019-03-06
StringBuilder拼接字符串,“,”在前还是在后问题
2019-03-06
给asterisk1.8.7添加menuselct选项
2019-03-06