心路历程:
本以为要用动态规划,但是递推有点太难了;主要是第一反映hard题不能就一个栈就解决吧,结果还真就是一个栈解决了。
括号问题还是得栈入手,这道题考察栈+哈希表思想(其实就是数组索引)
注意的点:
1、在最后计算间隔时,需要前后放-1和len(s),以维持循环不变量原则
解法:栈+哈希表
class Solution:def longestValidParentheses(self, s: str) -> int:# 用索引+栈的方式去解决from collections import dequestack = deque([])for i, c in enumerate(s):if c == '(': stack.append(i)else:if stack and s[stack[-1]] == '(': stack.pop()else: stack.append(i)# 此时stack剩下的索引即为分界点,这块有点小弯stack.appendleft(-1) # 循环不变量stack.append(len(s))max_l = 0for i in range(len(stack)-1):max_l = max(max_l, stack[i+1] - stack[i] - 1)return max_l