【032-Longest Valid Parentheses(最长有效括号)】

package algorithm;

import java.util.Stack;

/*
【032-Longest Valid Parentheses(最长有效括号)】
【LeetCode-面试算法经典-Java实现】【所有题目目录索引】
原题
  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. 

题目大意
  给定一个字符串,只包含小括号号,求最长的合法的小括号的数目。 

解题思路
  使用栈来实现 
 */
public class LongestValidParentheses {

    public static int solution(String str){
        
        char[] chs=str.toCharArray();
        int max=0;
        int tmp=0;
        Stack<Character> sk=new Stack<Character>();
        sk.add(' ');
        for(int i=0;i<chs.length;i++){
          char ch=chs[i];
          
          switch(ch){
          case '(':{
              //tmp++;
              sk.push(ch);
              break;
          }
          case ')':{
              char ch1=sk.empty()?' ':sk.pop();//
              if(ch1=='('){
                  tmp+=2;
                  if(tmp>max){ max=tmp;}
              }else{
                  tmp=0;
                  
              }
              
              
              break;
          }
          
          
          }
          
          
            
        }
        
        return max;
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        String str="(()";
        str=")()())";
        str="(((()))))";
        int result=solution(str);
        System.out.println(result);
    }

}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值