leecode做题笔记32————最长的有效括号

一开始看到这个题目的时候,由于之前做到过判断是否为有效括号的题目,所以我想到了用栈的思想,编写代码。但是,从这个思路走下去,必须把整个字符串分解为各个有效部分,分别判断,求取最长,比较麻烦。后来看到题解的方法,是先在栈里面放进去了一个(-1).这个想法很好。

具体代码如下:

class Solution {
public:
    int longestValidParentheses(string s) {
        int maxans = 0;
        stack<int> stk;
        stk.push(-1);
        for (int i = 0; i < s.length(); i++) {
            if (s[i] == '(') {
                stk.push(i);
            } else {
                stk.pop();
                if (stk.empty()) {
                    stk.push(i);
                } else {
                    maxans = max(maxans, i - stk.top());
                }
            }
        }
        return maxans;
    }
};

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/longest-valid-parentheses/solution/zui-chang-you-xiao-gua-hao-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

其他的还有动态规划的方法,这个方法以后碰到最值问题的时候需要有条件反射。

另一种是贪心算法,设定了左边括号计数器和右边括号计数器,但是注意这个方法需要从左到右和从右到左都循环一遍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值