1. 最长有效括号问题解析
1.1 问题背景与核心思路
最长有效括号是字符串处理中的经典问题,要求我们找出给定字符串中最长的有效括号子串的长度。有效括号字符串需要满足每个左括号都能找到对应的右括号,并且括号嵌套关系正确。
我最初解决这个问题时,尝试过暴力解法——枚举所有可能的子串并验证其有效性。这种方法虽然直观,但时间复杂度高达O(n³),显然不适合处理较长的输入。经过思考,我发现可以利用栈这种数据结构来优化解法。
栈的特性完美匹配了括号匹配的需求:后进先出的特性可以确保最近遇到的左括号能够优先匹配右括号。具体实现时,我们不仅需要记录括号本身,还需要记录它们在字符串中的位置信息,这样才能准确计算有效子串的长度。
1.2 详细解法与代码实现
在实现过程中,我设置了一个初始值为-1的栈底元素作为哨兵节点。这个技巧非常重要,它帮助我们处理边界情况,特别是当有效子串从字符串开头开始时。
python复制class Solution:
def longestValidParentheses(self, s: str) -> int:
stack = [-1] # 虚拟哨兵,以这个点为界
result = 0
for i, ch in enumerate(s):
if ch == '(':
stack.append(i)
elif len(stack) > 1: # 除哨兵外元素非空
stack.pop()
result = max(result, i - stack[-1])
else:
stack[0] = i
return result
这段代码的核心逻辑是:
- 遇到左括号时,将其索引压入栈
- 遇到右括号时,如果栈中有对应的左括号(栈长度>1),则弹出栈顶元素并计算当前有效长度
- 如果栈中没有对应左括号(只有哨兵),则更新哨兵位置
1.3 复杂度分析与优化空间
这个算法的时间复杂度是O(n),因为我们只需要遍历字符串一次。空
