用栈模拟一遍,将所有无法匹配的括号的位置全部置1
例如: "()(()"的mark为[0, 0, 1, 0, 0]
再例如: ")()((())"的mark为[1, 0, 0, 1, 0, 0, 0, 0]
经过这样的处理后, 此题就变成了寻找最长的连续的0的长度
注意用栈模拟的时候,进入的一定是左括号的index,先只标记右括号的index,最后弹出所有没有匹配的左括号index,再进行mark
class Solution:
def longestValidParentheses(self, s: str) -> int:
arr=[]
n=len(s)
mark=[0]*n
for i in range(n):
if s[i]=="(":
arr.append(i)
else:
if len(arr)==0:
mark[i]=1
else:
arr.pop(-1)
while len(arr)!=0:
num=arr.pop(0)
mark[num]=1
ans=0
cur=0
for i in mark:
if i==1:
cur=0
else:
cur+=1
ans=max(ans,cur)
return ans