1. 三道经典算法题解析与实战指南
这三道题目分别来自力扣(LeetCode)的热门题库,涵盖了字符串处理、动态规划等核心算法知识点。作为算法工程师日常练习和面试准备的经典素材,它们不仅能检验基础编码能力,更能考察对特定算法思想的掌握程度。本文将带您深入理解每道题目的解题思路、最优解法实现以及常见易错点。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 力扣32:最长有效括号
2.1 问题描述与核心难点
给定一个仅包含'('和')'的字符串,找出最长有效(格式正确且连续)括号子串的长度。例如:
- 输入:"(()" → 输出:2
- 输入:")()())" → 输出:4
核心难点在于:
- 需要处理嵌套括号结构(如"(())")
- 需要识别不连续的有效括号段(如"()(()"中的两段)
- 时间复杂度需控制在O(n)级别
2.2 栈解法实现详解
最优解法使用栈结构,具体步骤如下:
python复制def longestValidParentheses(s: str) -> int:
stack = [-1] # 初始化栈底哨兵
max_len = 0
for i in range(len(s)):
if s[i] == '(':
stack.append(i)
else:
stack.pop()
if not stack:
stack.append(i) # 更新基准点
else:
max_len = max(max_len, i - stack[-1])
return max_len
关键点解析:
- 栈底始终保存最后一个无法匹配的')'的索引(初始为-1)
- 遇到'('时压栈其索引
- 遇到')'时弹出栈顶:
- 若栈为空,说明当前')'无法匹配,更新基准点
- 否则计算当前有效长度(当前索引-栈顶索引)
注意:栈解法的时间复杂度为O(n),空间复杂度最坏情况也是O(n)(当所有字符都是'('时)
2.3 动态规划解法对比
另一种思路是动态规划,定义dp[i]表示以i结尾的最长有效长
