1. 题目背景与核心挑战
最长有效括号是字符串处理中的经典难题,也是技术面试中的高频考点。给定一个仅包含 '(' 和 ')' 的字符串,要求找出其中最长的有效(格式正确且连续)括号子串的长度。例如字符串 ")()())" 的最长有效括号子串是 "()()",长度为4。
这个问题的难点在于:
- 有效括号需要满足严格的嵌套规则
- 需要处理间断的有效子串(如"()(()"中两个有效段被隔开)
- 最优解要求O(n)时间复杂度和O(1)或O(n)空间复杂度
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 解法一:栈的巧妙运用
2.1 基础栈解法
栈是处理括号匹配问题的天然工具。基本思路是:
- 初始化栈,先压入-1作为基准点
- 遍历字符串:
- 遇到'('时压入当前索引
- 遇到')'时弹出栈顶元素
- 如果栈为空,压入当前索引作为新基准
- 否则用当前索引减去栈顶元素更新最大值
python复制def longestValidParentheses(s: str) -> int:
stack = [-1]
max_len = 0
for i, char in enumerate(s):
if char == '(':
stack.append(i)
else:
stack.pop()
if not stack:
stack.append(i)
else:
max_len = max(max_len, i - stack[-1])
return max_len
2.2 栈解法的优化技巧
- 哨兵节点:初始压入-1可以统一处理边界条件
- 索引记录:栈中存储的是索引而非字符本身,便于计算长度
- 空间优化:实际只需要O(n)空间,最坏情况下栈深与字符串长度相同
注意:当字符串以')'开头时,基准点会立即更新,这是正确处理间断子串的关键
