C++算法:最长有效括号 -----栈的使用----中间存储

该博客介绍了如何使用C++解决LeetCode中的最长有效括号问题,提供了三种方法:暴力法、压栈下标法和双计数器法,并详细解释了每种方法的思路。通过示例和代码展示了解决过程。
摘要由CSDN通过智能技术生成

leetcode相关C++算法解答: https://github.com/Nereus-Minos/C_plus_plus-leetcode

题目:

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

示例 1:

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

示例 2:

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

方法一(暴力法):

考虑给定字符串中每种可能的非空偶数长度子字符串,检查它(非空偶数长度子字符串)是否是一个有效括号字符串序列。为了检查有效性,我们可以使用栈的方法,栈占用时间多,所以可以使用left记录(个数即可。

方法二(压栈下标):

栈存(的下标,首先在栈底放-1,标志从头的下一个位置开始计算匹配的括号数;当遇到多余)时,弹出-1,更换为此时的下标,表明从此位置的下一个位置开始往后计算匹配的括号数!!!
//具体做法:对于遇到的每个 ‘(’,我们将它的下标放入栈中。 对于遇到的每个 ‘)’,我们弹出栈顶的元素,当此时栈不为空时,将当前元素的下标与此时栈顶元素下标作差,得出当前有效括号字符串的长度,为空时,将此时下标压入栈中,continue。通过这种方法&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值