[数据结构与算法]最长有效括号32

给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。

输入: ")()())"
输出: 4
解释: 最长有效括号子串为 "()()"

方法 ( ) )( ( ) ) )
-1 0 1 2 3 4 5 6 7
使用一个栈,栈顶放-1,当作起始位置
代码:
public int longestValidParentheses(String s) {
        if(s == null || s.length() < 2)
            return 0;
        
        Stack<Integer> stack = new Stack<Integer>();
        stack.push(-1); //栈顶默认放-1 
        int max = 0;
        
        int start = 0, len = s.length();
       
        while(start < len){
            switch(s.charAt(start)){
                case '(':
                    stack.push(start); //压入
                    break;
                case ')':
                    int loc = stack.pop(); //弹出
                    
                    if(!stack.empty()){
                        max = Math.max(max, start-stack.peek());                   
                    }else{
                        stack.push(start); //空了代表  )比(  多,重新设置起始位置
                    } 
                    break;
                default:
                    break;
            }
            start++;
        }
        return max;
    }

  

posted @ 2019-09-12 01:39  安琪拉的博客(公众号)  阅读(194)  评论(0编辑  收藏  举报