zoukankan      html  css  js  c++  java
  • 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 "()", which has length = 2.

    Another example is ")()())", where the longest valid parentheses substring is "()()", which has length = 4.

     维护一个栈,最初栈添加一个Node(')', -1)。

    if (s.charAt(i) == ')'  )

      if (&& 栈顶为 '(')

      '(' 出栈 计算长度 Math.max( max,  i - stack.peek().下标)

      计算长度时是当前下标,和'(' 前一个元素下标的差值;

      else 

        ')' 入栈

    else

      '(' 入栈

    class Node{
        int i;
        char c;
       public Node(char c, int i){
           this.i = i;
           this.c = c;
       }
    }
    public class Solution {
        public int longestValidParentheses(String s) {
            int len = s.length();
            int max = 0;
            Stack<Node> nStack = new Stack<Node>();
            nStack.push(new Node(')', -1));
            for(int i = 0; i< len; i++){
                char c = s.charAt(i);
                if(c == '('){
                    nStack.push(new Node(c, i));
                }else{
                    Node n = nStack.peek();
                    if(n.c == '('){
                        nStack.pop();
                        max = Math.max(max, i - nStack.peek().i);
                    }else{
                        nStack.push(new Node(c,i));
                    }
                }
            }
            
            return max;
        }
    }
  • 相关阅读:
    1649. 超级棒棒糖
    1872. 连接棒材的最低费用
    二叉树的层级遍历转换
    ZMQ的三种消息模式
    logging日志
    Svn基本使用
    Pycharm快捷键
    Redis安装和连接
    整形转中文
    C# Socket连接 无法访问已释放的对象
  • 原文地址:https://www.cnblogs.com/RazerLu/p/3552032.html
Copyright © 2011-2022 走看看