- 题目描述
给定一个只包含 '('
和 ')'
的字符串,找出最长的包含有效括号的子串的长度。
- 示例
示例 1:
输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"
示例 2:
输入: ")()())"
输出: 4
解释: 最长有效括号子串为 "()()"
- 思路
题解中的常规思路:找到字符串中可以匹配的括号对的下标,将这些下标汇总到一个数组中,排序,然后找排序后数组中最长的数值连续的子序列长度。子序列的长度就是要求的,最长的包含有小括号的子串的长度。
- 代码
class Solution:
def longestValidParentheses(self, s: str) -> int:
if not s:
return 0
#存放元素下标的数组
res = []
#用来暂存(所位于的元素下标
stack = []
#遍历字符串
for i in range(len(s)):
#如果字符是),且之前的字符串中存在可以与之配对的(,那么就把)(的下标均加入res数组
if stack and s[i] == ")":
res.append(stack.pop())
res.append(i)
#如果字符是(,就把当前下标存入该数组
if s[i] == "(":
stack.append(i)
#对res数组排序
res.sort()
i = 0
ans = 0
n = len(res)
#寻找数组中最长的连续数值的子序列长度
while i < n:
j = i
while j < n-1 and res[j+1] == res[j] + 1:
j += 1
ans = max(ans,j-i+1)
i = j + 1
return ans