【栈】

首先,排除长度小于等于1的s

然后,遍历s,当前字符为'('时,将其索引填入stack;否则,判断stack是否为空,不为空就将stack最后一个'('的索引和当前索引i一起加入res

一次循环结束后,判断res是否为空,为空直接返回0

给res去重、排序

遍历res,找出连续索引的最大长度作为返回值

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param s string字符串 
# @return int整型
#
class Solution:
    def longestValidParentheses(self , s: str) -> int:
        # write code here
        if len(s)<=1:
            return 0
        stack=[]
        res=[]
        for i in range(len(s)):
            if s[i]=='(':
                stack.append(i)
            else:
                if stack:
                    res.extend([stack.pop(),i])
        if not res:
            return 0
        res=list(set(res))
        res.sort()
        init=res[0]
        l,s=0,0
        for i in range(1,len(res)):
            if res[i]!=init+1:
                l=max(l,i-s)
                s,init=i,res[i]       
            else:
                if i==len(res)-1 and s==0:
                    l=len(res)
                else:
                    init+=1
        
        return l