美文网首页算法提高之LeetCode刷题数据结构和算法分析Go
字节面试基础算法——有效的括号(go)

字节面试基础算法——有效的括号(go)

作者: 五月柠檬 | 来源:发表于2020-04-21 14:14 被阅读0次
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:

1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。
3.注意空字符串可被认为是有效字符串

代码:
func isValid(s string) bool {
    var stack []string
    mapTemp := make(map[string]string)
    mapTemp[")"]="("
    mapTemp["]"]="["
    mapTemp["}"]="{"
    for i := 0; i < len(s); i++ {
        ca,ok := mapTemp[s[i: i+1]]
        if ok {
            if len(stack) == 0 || ca != stack[len(stack)-1]{
                return false
            }
            stack = stack[:len(stack)-1]
        }else {
            stack = append(stack, s[i: i+1])
        }
    }
    if len(stack) > 0 {
        return false
    }
    return true
}
思路:

1.利用栈先进后出的特点,遇到左括号入栈,遇到右括号时将对应的左括号出栈,看遍历完所有的字符后栈是否为空;
2.建立map 构建左右括号的对应关系:key为右括号,value为左括号,这样查询 2个括号是否对应只需 O(1) 时间复杂度;
3.利用go切片实现栈的逻辑。

相关文章

网友评论

    本文标题:字节面试基础算法——有效的括号(go)

    本文链接:https://www.haomeiwen.com/subject/iyyuihtx.html