zoukankan      html  css  js  c++  java
  • 练手系列(2) 最长有效括号的长度

    这是厐果网英雄会(http://hero.pongo.cn/)上的一道题。

    原题如下:给定只包含括号字符'('和 ')''的字符串,请找出最长的有效括号内子括号的长度。

    举几个例子如下: 例如对于"( ()",最长的有效的括号中的子字符串是"()" ,有效双括号数1个,故它的长度为 2。  再比如对于字符串") () () )",其中最长的有效的括号中的子字符串是"() ()",有效双括号数2个,故它的长度为4。  再比如对于"( () () )",它的长度为6。         

    换言之,便是有效双括号"()"数的两倍。

    给定函数原型int longestValidParentheses(string s),请完成此函数,实现上述功能。 

      看到题目立马想到用栈来实现。Java的集合类Vector正好有一个子类Stack,所以就直接拿来用了。

    过程先用图片表示一下

     再用代码表示:

     1 import java.util.Stack;
     2 
     3 public class Test01 {
     4     public static void main(String[] args) {
     5         int i = longestValidParentheses(")()(()()");
     6         System.out.println(i);
     7     }
     8 
     9     public static int longestValidParentheses(String s) {
    10         // 定义子括号的长度
    11         int j = 0;
    12         // 将字符串还原为字符数组
    13         char[] chs = s.toCharArray();
    14         // 创建一个Stack实例
    15         Stack stack = new Stack();
    16         // 遍历字符数组
    17         for (int i = 0; i < chs.length; i++) {
    18             // 如果这个数组元素是右括号,那么就看看栈里面是不是已经有了左括号
    19             if (chs[i] == ')') {
    20                 // 如果栈里面为空,那么丢弃这个右括号,找下一个数组元素
    21                 if (stack.size() > 0 && stack.peek() == null) {
    22                     continue;
    23                 } else if (stack.size() > 0
    24                         && (stack.peek().toString()).equals("(")) {
    25                     // 如果栈里面有一个左括号,那么弹出此左括号,并把长度加上1
    26                     stack.pop();
    27                     j++;
    28                 }
    29             } else {
    30                 // 如果为左括号,那么直接压入栈
    31                 stack.push(chs[i]);
    32             }
    33         }
    34         return j * 2;
    35     }
    36 }

            

  • 相关阅读:
    stata如何建立交互项
    PSM的stata实现
    Stata结果输出:outreg2命令详解
    stata固定效应
    【C++/Qt】cmake生成可执行文件流程(Windows/Linux)
    【数学相关】概率论手写笔记
    【搜索】dfs&bfs
    【C/C++】对拍教程
    【MySQL】MySQL基础操作(下)
    【Linux】ubuntu初始配置
  • 原文地址:https://www.cnblogs.com/huashui/p/3175194.html
Copyright © 2011-2022 走看看