essay

hot100-有效的括号

#算法

hot100——有效的括号

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。

左括号必须以正确的顺序闭合。

每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = "()"

输出:true

示例 2:

输入:s = "()[]{}"

输出:true

示例 3:

输入:s = "(]"

输出:false

示例 4:

输入:s = "([])"

输出:true

示例 5:

输入:s = "([)]"

输出:false

提示:

1 <= s.length <= 10410^4

s 仅由括号 '()[]{}' 组成

解法

func isValid(s string) bool {
    // 使用切片模拟栈
    stack := make([]rune, 0)
    // 括号映射:右括号对应的左括号
    pairs := map[rune]rune{
        ')': '(',
        ']': '[',
        '}': '{',
    }
 
    for _, ch := range s {
        // 如果是右括号
        if left, ok := pairs[ch]; ok {
            // 栈顶元素必须匹配对应的左括号
            if len(stack) == 0 || stack[len(stack)-1] != left {
                return false
            }
            // 匹配成功,弹出栈顶
            stack = stack[:len(stack)-1]
        } else {
            // 左括号直接入栈
            stack = append(stack, ch)
        }
    }
    // 栈空说明全部匹配
    return len(stack) == 0
}
comments如果有不同意见或者补充,直接留在这里。
contact

在别处继续找到我

如果你想聊技术、设计,或者只是打个招呼。

暂未配置外部链接