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 ;
    }
}
posted @   依嘫  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示