mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-04 08:02:30 +08:00
59 lines
1004 B
Go
59 lines
1004 B
Go
package leetcode
|
|
|
|
// 解法一 栈
|
|
func longestValidParentheses(s string) int {
|
|
stack, res := []int{}, 0
|
|
stack = append(stack, -1)
|
|
for i := 0; i < len(s); i++ {
|
|
if s[i] == '(' {
|
|
stack = append(stack, i)
|
|
} else {
|
|
stack = stack[:len(stack)-1]
|
|
if len(stack) == 0 {
|
|
stack = append(stack, i)
|
|
} else {
|
|
res = max(res, i-stack[len(stack)-1])
|
|
}
|
|
}
|
|
}
|
|
return res
|
|
}
|
|
|
|
func max(a, b int) int {
|
|
if a > b {
|
|
return a
|
|
}
|
|
return b
|
|
}
|
|
|
|
// 解法二 双指针
|
|
func longestValidParentheses1(s string) int {
|
|
left, right, maxLength := 0, 0, 0
|
|
for i := 0; i < len(s); i++ {
|
|
if s[i] == '(' {
|
|
left++
|
|
} else {
|
|
right++
|
|
}
|
|
if left == right {
|
|
maxLength = max(maxLength, 2*right)
|
|
} else if right > left {
|
|
left, right = 0, 0
|
|
}
|
|
}
|
|
left, right = 0, 0
|
|
for i := len(s) - 1; i >= 0; i-- {
|
|
if s[i] == '(' {
|
|
left++
|
|
} else {
|
|
right++
|
|
}
|
|
if left == right {
|
|
maxLength = max(maxLength, 2*left)
|
|
} else if left > right {
|
|
left, right = 0, 0
|
|
}
|
|
}
|
|
return maxLength
|
|
}
|