32. 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.

 

用栈来解决匹配问题,遇到(入栈,遇到)出栈,出栈后分两种情况来算最长匹配段,当栈不为空时,那么直接当前位置-栈顶位置,如果为空,那么就需要记录最长匹配段的开始位置,并用i-开始位置

 

 

public class Solution {
    public int longestValidParentheses(String s) {
         int begin=0;
        int res=0;
        Stack<Integer> stack=new Stack<Integer>();
        for (int i=0;i<s.length();i++){
            if ("(".equals(s.substring(i,i+1))){
                stack.push(i);
            }else {
                if (stack.empty()){
                    begin=i+1;
                }else {
                    stack.pop();
                    if (stack.empty()){
                        res=Math.max(res,i-begin+1);
                    }else {
                        res=Math.max(res,i-stack.peek());
                    }
                }
            }
        }
        return res;
    }
}

 

posted on 2017-07-12 10:44  sure0328  阅读(65)  评论(0)    收藏  举报

导航