zoukankan      html  css  js  c++  java
  • [数据结构与算法]最长有效括号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;
        }
    

      

    欢迎关注Java流水账公众号
  • 相关阅读:
    数组的复制
    二维数组的切片和索引
    一维数组的切片和索引
    is判断函数
    其他方式创建数组
    ndarray对象属性
    创建随机数组
    arange创建数组
    SmartBinding与kbmMW#3
    SmartBinding与kbmMW#2
  • 原文地址:https://www.cnblogs.com/guofu-angela/p/11509753.html
Copyright © 2011-2022 走看看