其他分享
首页 > 其他分享> > leetcode 32. 最长有效括号

leetcode 32. 最长有效括号

作者:互联网

32. 最长有效括号

问题描述

给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。
示例 1:
输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"
示例 2:
输入: ")()())"
输出: 4
解释: 最长有效括号子串为 "()()"

问题分析

我们从左到右进行扫描,我们使用栈lefts来存放左括号,有两种情况:

当然也可以把2.2.1和2.2.2理解为一个位置,那就是被匹配的左括号之前的一个位置,但是如果栈空了就没法找到这个位置,因此我们使用一个last来进行记录。

代码

class Solution {
public:
    int longestValidParentheses(string s) {
        int n = s.size();
        if(n < 2) return 0;
        stack<int> lefts;
        int i,ans = 0,last = -1;
        for(i = 0; i < n; i++)
        {
            if(s[i] == '(')
                lefts.push(i);
            else{
                if(!lefts.empty())
                {
                    lefts.pop();
                    if(lefts.empty())
                    {
                        ans = max(ans,i-last);
                    }
                    else{
                        ans = max(ans,i - lefts.top());
                    }
                }
                else{
                    last = i;
                }
            } 
        }
        return ans;
    }
};

标签:last,lefts,32,括号,匹配,ans,2.2,leetcode
来源: https://www.cnblogs.com/qujingtongxiao/p/11882558.html