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 };
  • 相关阅读:
    数据结构和算法关系
    x轴滚动
    常用Python第三方库简介
    devgridContral
    第一次线程使用经验总结
    调取图片出现的的内存泄露,导致大红叉
    IEEE754 处理数据变换
    c# 基础任务1
    Python-常用第三方库
    C#高性能大容量SOCKET并发(八):通讯协议
  • 原文地址:https://www.cnblogs.com/wmx24/p/9723915.html
Copyright © 2011-2022 走看看