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;
        }
    }
  • 相关阅读:
    浮点数运算的误差
    表单
    列表、表格与媒体元素
    HTML5基础
    面向对象核心技术(java)
    js原生特效
    面向对象编程基础(java)
    java程序:转化金额
    详解字符串(笔记)
    递归函数
  • 原文地址:https://www.cnblogs.com/RazerLu/p/3552032.html
Copyright © 2011-2022 走看看