• 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 };
  • 相关阅读:
    软件的结构
    SpringMVC返回值类型及响应数据类型
    mybatis学习日记3
    面试八
    面试七
    微信小程序实例源码大全下载
    dot.js模板引擎,避免大量拼接字符串
    前端重构方案了解一下
    微信小程序开发基础教程
    如何让签到成为提升用户活跃度的利器
  • 原文地址:https://www.cnblogs.com/huenchao/p/7704261.html
Copyright © 2020-2023  润新知