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.解题思路:
用两个stack,一个用来装不match的括号符号,另一个装此符号的index。最后得到的stack就是将隔断match符号的位置。相隔的两个index相减就得到了这两个符号的中间的有效括号长度。
Java Code:
public int longestValidParentheses(String s) {
       Stack index = new Stack();
       Stack parenth = new Stack();
       int maxLen = 0;
       
       for(int i = 0; i < s.length(); i++){
           if(!index.isEmpty() && parenth.peek() == '(' && s.charAt(i) == ')'){
               parenth.pop();
               index.pop();
           }else{
               parenth.add(s.charAt(i));
               index.add(i);
           }
       }
       
       int curr = s.length();
       while(!index.isEmpty()){
           maxLen = maxLen > curr - 1 - index.peek()? maxLen : curr - 1 - index.peek();
           curr = index.pop();
       }
       
       if(curr > 0){
           maxLen = maxLen > curr? maxLen : curr;
       }
       
        return maxLen; 
    }
    
 
No comments:
Post a Comment