最长有效括号
题目描述:
给定一个只包含 '('
和 ')'
的字符串,找出最长的包含有效括号的子串的长度。
示例1
输入:
输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"
示例2
输入: ")()())"
输出: 4
解释: 最长有效括号子串为 "()()"
解题思路:
- 对括号字符串数组进行遍历,如果判断是
(
符号,就入栈(stack.append
) - 如果是
)
符号,则需要先进行判断,如果此时栈为空,则需要将正确括号匹配的开始位置向后挪一个位置( s t = i + 1 st = i + 1 st=i+1),然后继续循环遍历 - 如果此时栈不为空,那就先将
(
出栈,这个时候如果栈为空,就判断新的有效括号长度是否更长,如果栈不为空,则从栈顶位置的下一位开始进行有效括号长度的判断
Python源码:
class Solution:
def longestValidParentheses(self, s: 'str') -> 'int':
ans = 0
n = len(s)
stack = []
st = 0
for i in range(n):
if s[i] == '(':
stack.append(i)
else:
if len(stack) == 0:
st = i + 1
continue
else:
stack.pop()
if len(stack) == 0:
ans = max(ans, i-st+1)
else:
ans = max(ans, i-stack[-1])
return ans
欢迎关注我的github:https://github.com/UESTCYangHR