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

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:

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切片实现栈的逻辑。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容