leetcode32. 最长有效括号-java
题目所属分类
栈的相关例题
原题链接
给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
代码案例:输入:s = “(()”
输出:2
解释:最长有效括号子串是 “()”
输入:s = “”
输出:0
题解
需要注意的是,如果一开始栈为空,第一个字符为左括号的时候我们会将其放入栈中,这样就不满足提及的「最后一个没有被匹配的右括号的下标」,为了保持统一,我们在一开始的时候往栈中放入一个值为 -1 的元素。
就是记录每个字串的起点前一个位置
合法括号就是: 左右数量相等
然后左括号数量>=右括号数量
合法序列不会横跨两条线
反证法证明:
就是栈里面存放的就是那个分界的右括号的下标
class Solution {
public int longestValidParentheses(String s) {
if(s.length() == 0) return 0 ;
int ans = 0 ;
Stack<Integer> st = new Stack<>();
st.push(-1);
for(int i = 0 ; i < s.length() ; i++){
char t = s.charAt(i);
if(t == '(') st.push(i);
else{
st.pop();
if(st.isEmpty()) st.push(i);
else ans = Math.max(ans,i-st.peek());
}
}
return ans ;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)