zoukankan      html  css  js  c++  java
  • LeetCode 32. 最长有效括号(Longest Valid Parentheses)

    题目描述

    给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。

    示例 1:

    输入: "(()"
    输出: 2
    解释: 最长有效括号子串为 "()"
    

    示例 2:

    输入: ")()())"
    输出: 4
    解释: 最长有效括号子串为 "()()"

    解题思路

    设置一个栈保存字符串当前位置之前的所有'('的索引,并维护当前有效括号的前一个索引以及最长有效括号长度。每当遇到一个'('就将其索引入栈,遇到')'则分为两种情况:

    • 若此时栈为空,说明此位置一定不在有效括号内,更新当前有效括号的前一个索引;
    • 若栈不为空,则弹出栈顶索引,此时此位置一定在当前有效括号内。若出栈后栈变为空,则有效括号长度可从最初位置算起;若不为空,则有效括号长度需从当前栈顶索引之后算起

    代码

     1 class Solution {
     2 public:
     3     int longestValidParentheses(string s) {
     4         stack<int> st;
     5         int maxLen = 0, left = -1;
     6         for(int i = 0; i < s.length(); i++){
     7             if(s[i] == '(') st.push(i);
     8             else{
     9                 if(st.size()){
    10                     st.pop();
    11                     if(st.empty()) maxLen = max(maxLen, i - left);
    12                     else maxLen = max(maxLen, i - st.top());
    13                 }
    14                 else left = i;
    15             }
    16         }
    17         return maxLen;
    18     }
    19 };
  • 相关阅读:
    web性能优化
    9.1_the end
    8.28_the end
    1.获取元素绝对位置
    8.14_end
    JavaScript 函数用途
    JavaScirpt事件处理
    《JavaScript语言精粹》读书笔记
    《图解http协议》之HTTPs学习笔记
    Laya 1.x 按文件夹TS代码合并
  • 原文地址:https://www.cnblogs.com/wmx24/p/9723915.html
Copyright © 2011-2022 走看看