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; } }