题目定位
这其实是普通栈题而非严格单调栈题,但它很适合训练用后进先出结构去匹配最近未闭合左括号的直觉。
关键观察
每个右括号都必须匹配最近那个尚未闭合的左括号,而不是任意更早的一个。
目标复杂度
O(n) / O(n)
这题的解法思路怎么拆
1
这其实是普通栈题而非严格单调栈题,但它很适合训练用后进先出结构去匹配最近未闭合左括号的直觉。
2
每个右括号都必须匹配最近那个尚未闭合的左括号,而不是任意更早的一个。
3
先明确栈维护的是哪种“尚未解决”的关系。
4
只要单调性不被破坏,就持续压栈。
参考实现
Python# Generic pattern template
stack = []
for i, value in enumerate(nums):
while stack and nums[stack[-1]] < value:
prev_index = stack.pop()
# value is the next greater for prev_index
stack.append(i)
常见坑点
warning
字符串以右括号开头时直接对空栈弹出。
warning
多种括号混合时匹配类型判断写错。
高频追问
如果要返回第一个非法位置,该怎么改?
如果允许通配括号呢?
继续刷相关题
先把 单调栈 这个模式刷成体系,再去做更难变体。