zoukankan      html  css  js  c++  java
  • 32. Longest Valid Parentheses

    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.

    这个问题主要考虑2中情况

    第一种:())()()

    第二种:()(()() 

    两种答案都是4

    第一种比较简单,我们用一个堆栈维护,堆栈只保存"("的情况,发现是")",就弹出。如果发现堆栈为空了,表示起点要重新更新了。

    第二种就比较难想到,我们会发现到最后的时候,堆栈里还是存在一个"(",没法去匹配了,也就是堆栈不为空。那4是怎么得出来的?

    想象一下如果stack里存的不是"(",而是对应的下标值,那最后一个")"的时,假设变量 i 为 6(i从0开始),stack里存的之前的那个单独的")"

    的下标为2.  6-2正好为4。

     1 /**
     2  * @param {string} s
     3  * @return {number}
     4  */
     5 var longestValidParentheses = function(s) {
     6     
     7    //这题没想出来,看了一篇别人写的结题报告,挺好的。
     8     //http://blog.csdn.net/worldwindjp/article/details/39460161
     9     
    10     var start = -1;
    11     var stack = [];
    12     var max = 0;
    13     for(var i = 0;i<s.length;i++){
    14         
    15         if(s.charAt(i) == "("){
    16             
    17             stack.push(i);
    18         }else{
    19             
    20             if(stack.length){
    21                 
    22                 stack.pop();
    23                 if(!stack.length){
    24                     
    25                     max = Math.max(i-start,max);    
    26                 }else{
    27                     
    28                     max =  Math.max(i-stack[stack.length - 1],max);    
    29                 }
    30             }else{
    31                 
    32                 start = i;
    33             }
    34             
    35             
    36         }
    37         
    38     }
    39     
    40     return max;
    41 };
  • 相关阅读:
    iOS使用Charles(青花瓷)抓包并篡改返回数据图文详解(转)
    iOS 9 添加白名单
    iOS 中字体的应用(转)
    iOS 后台操作的开发(转)
    iOS 知识点大总结(转)
    在Xcode中找中文字符串(正则表达式)
    block 使用时的注意点(转)
    xcode armv6 armv7 armv7s arm64 (转)
    使用Android studio过程中发现的几个解决R变红的办法
    折腾了一晚上的“equals”和“==”
  • 原文地址:https://www.cnblogs.com/huenchao/p/7704261.html
Copyright © 2011-2022 走看看