美文网首页Go算法
(18)Go栈思想解决括号匹配问题

(18)Go栈思想解决括号匹配问题

作者: 哥斯拉啊啊啊哦 | 来源:发表于2019-05-14 18:32 被阅读0次
    栈是一种先进后出的数据结构
    思路:遍历字符串,如果是左括号则放进栈中,如果是右括号则从栈中推出元素,看两者是否匹和,
    如果均匹和且栈中为空,返回true
    // 时间复杂度为O(n)
    // 空间复杂度为O(n)
    func isValid2(s string) bool {
        m := make(map[byte]byte)
        m['('] = ')'
        m['['] = ']'
        m['{'] = '}'
    
        // 数组实现栈功能
        sli := make([]byte, 0)
        if len(s) == 0 {
            return true
        }
        if len(s)%2 == 1 {
            return false
        }
        for i, b := range s {
            if i == 0 && (s[i] == ')' || s[i] == ']' || s[i] == '}') {
                return false
            }
            if b == '(' || b == '[' || b == '{' {
                sli = append(sli, byte(b))
            } else {
                // 这里实现栈的功能
                left := sli[len(sli)-1]
                sli = sli[:len(sli)-1]
                if m[left] != byte(b) {
                    return false
                }
            }
        }
        if len(sli) != 0 {
            return false
        }
        return true
    }
    

    提交leetcode,通过

    相关文章

      网友评论

        本文标题:(18)Go栈思想解决括号匹配问题

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