LeetCode笔记——32. 最长有效括号

32. 最长有效括号

对于遇到的每个 ‘(’ ,将它的下标放入栈中。 对于遇到的每个‘)’ ,弹出栈顶的元素并将当前元素的下标与弹出元素下标作差,得出当前有效括号字符串的长度。通过这种方法,继续计算有效子字符串的长度,并最终返回最长有效子字符串的长度。

public class Solution {
    public int longestValidParentheses(String s) {
        //最长字串计数
        int maxans = 0;
        //创建栈
        Stack<Integer> stack = new Stack<>();
        //首先将-1压入栈中
        //1# 不加 -1的话。碰见类似 "()" 这种情况,在碰到右括号后直接弹出左括号 此时判断 stack=empty 会做压栈操作。 
        //maxans = Math.max(maxans, i - stack.peek()); 这句话不会执行。 
        //2# 加入当前右括号是为了作为下次 i - stack.peek() 而使用的。
        stack.push(-1);
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '(') {
                stack.push(i);
            } else {
                stack.pop();
                if (stack.empty()) {
                    stack.push(i);
                } else {
                    //计算最大值
                    maxans = Math.max(maxans, i - stack.peek());
                }
            }
        }
        return maxans;
    }
}

复杂度分析

时间复杂度: O(n) 。 n 是给定字符串的长度。

空间复杂度: O(n) 。栈的大小最大达到 n 。

利用栈结构进行符号的匹配

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,483评论 0 5
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,937评论 0 38
  • 1)这本书为什么值得看: Python语言描述,如果学的Python用这本书学数据结构更合适 2016年出版,内容...
    孙怀阔阅读 12,632评论 0 15
  • 题目给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。 示例 1:输入: "(()...
    HITZGD阅读 723评论 0 0
  • 夜晚, 是什么拨动了我们脆弱的心弦, 弹奏起感伤的乐曲, 看眼泪肆忌的飞舞, 也许那是爱, 一个似曾相识的声音。 ...
    伊凡时光静好阅读 153评论 0 2