最长的有效括号

时间:2021-04-12 11:45:04   收藏:0   阅读:0

技术图片
技术图片

func longestValidParentheses(s string) int {
    stack := []int{}//存左括号的下标位置
    var n = len(s)
    flags := make([]int, n)
    var length = 0
    var maxLength = 0

    for i:=0;i<n;i++{
        // s[i]是左括号
        if s[i]==‘(‘{
            stack = append(stack, i)
        }else{
            // s[i]是右括号
            if len(stack)==0{
                // 多余的右括号,标记
                flags[i] = 1
            }else{
                // 右括号匹配
                stack = stack[:len(stack)-1]
            }
        }
    }
    // 未匹配的左括号是多余的,标记
    for len(stack)>0{
        flags[stack[len(stack)-1]] = 1
        stack = stack[:len(stack)-1]
    }

    // 寻找标记之间的最大长度
    for i:=0;i<n;i++{
        if flags[i]==0{
            length++
            maxLength = max(maxLength, length)//每次更新最大长度
        }else{
            length = 0
        }
    }

    return maxLength
}

func max(a, b int)int{
    if a>b{
        return a
    }
    return b
}
评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!