leetcode相关C++算法解答: https://github.com/Nereus-Minos/C_plus_plus-leetcode
题目:
给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。
示例 1:
输入: “(()” 输出: 2 解释: 最长有效括号子串为 “()”
示例 2:
输入: “)()())” 输出: 4 解释: 最长有效括号子串为 “()()”
方法一(暴力法):
考虑给定字符串中每种可能的非空偶数长度子字符串,检查它(非空偶数长度子字符串)是否是一个有效括号字符串序列。为了检查有效性,我们可以使用栈的方法,栈占用时间多,所以可以使用left记录(个数即可。
方法二(压栈下标):
栈存(的下标,首先在栈底放-1,标志从头的下一个位置开始计算匹配的括号数;当遇到多余)时,弹出-1,更换为此时的下标,表明从此位置的下一个位置开始往后计算匹配的括号数!!!
//具体做法:对于遇到的每个 ‘(’,我们将它的下标放入栈中。 对于遇到的每个 ‘)’,我们弹出栈顶的元素,当此时栈不为空时,将当前元素的下标与此时栈顶元素下标作差,得出当前有效括号字符串的长度,为空时,将此时下标压入栈中,continue。通过这种方法&#