1、题目
2、题解
看完题目就头晕,虽然也想到了栈的形式,但是毫无思路。所以直接看题解了。
1)三个答案中左右遍历的方法个人感觉最容易理解,所以优先实现,代码如下:
func longestValidParentheses(s string) int {
left, right := 0, 0
s2 := []rune(s)
length := len(s2)
maxLeft, maxRight := 0, 0
for i:=0; i<length; i++{
if s2[i] == '('{
left++
}
if s2[i] == ')'{
right++
}
if left == right {
maxLeft = getMax(maxLeft, left+right)
}
if right>left {
left = 0
right = 0
}
}
left = 0
right = 0
for i:=length-1; i>=0; i--{
if s2[i] == '('{
left++
}
if s2[i] == ')'{
right++
}
if left == right {
maxRight = getMax(maxRight, left+right)
}
if right<left {
left = 0
right = 0
}
}
return getMax(maxLeft, maxRight)
}
func getMax(a, b int) int {
if a>=b {
return a
}else{
return b
}
}
提交结果如下