015_最长有效括号
知识点:括号、栈、动态规划
LeetCode第三十二题:https://leetcode-cn.com/problems/longest-valid-parentheses/solution/
还有种更秀的解法,就是运作左右指针,有双指针的味道,时间为O(n),空间O(1)
语言:GoLang
// 一般来说,括号相关的题目,都能用栈解决,只是怎么运用栈而已,思路!
func longestValidParentheses(s string) int {
length := len(s)
if length < 2 {
return 0
}
result := 0
stack := []int{-1}
for i := 0; i < length; i++ {
if s[i] == '(' {
stack = append(stack, i)
}else {
if len(stack) > 0 {
stack = stack[:len(stack) - 1]
}
if len(stack) == 0 {
stack = append(stack, i)
}else {
if i - stack[len(stack) - 1] > result {
result = i - stack[len(stack) - 1]
}
}
}
}
return result
}
// DP解法:以第i个元素结尾的子串的最长有效括号
func longestValidParentheses_(s string) int {
length := len(s)
dp := make([]int, length)
if length < 2 {
return 0
}
if s[0] == '(' && s[1] == ')' {
dp[1] = 2
}
result := dp[1]
for i := 2; i < length; i ++ {
if s[i] == ')' {
if s[i - 1] == '(' {
dp[i] = dp[i - 2] + 2
}
pre := i - 1 - dp[i - 1]
if s[i - 1] == ')' && pre >= 0 && s[pre] == '('{
dp[i] = 2 + dp[i - 1]
prePre := i - 2 - dp[i - 1]
if prePre > 0 {
dp[i] += dp[prePre]
}
}
}
if dp[i] > result {
result = dp[i]
}
}
return result
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?