题目
给定一个只包含 ‘(‘ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。
示例 1:
输入: “(()”
输出: 2
解释: 最长有效括号子串为 “()”
示例 2:输入: “)()())”
输出: 4
解释: 最长有效括号子串为 “()()”
栈
对于括号匹配问题, 最经典的处理方法是使用栈.
遍历字符串:
- 遇到
(
时, 将其下标入栈 - 遇到
)
时, 说明括号匹配正常. 出栈并计算当前下标能够成的有效括号子串.
问题就在于如何计算出栈时的最长有效括号字串.
我们可以先将-1
置于栈底.
- 如果出栈之后栈底不为空, 则将当前的下标减去栈顶, 就是当前的有效括号子串.
- 如果出栈之后栈底为空, 那么将当前下标(必为右括号
)
的下标) 放入栈底即可.
过程如图所示
代码如下
1 | class Solution { |