有效的括号 LeetCode 20题 |刷题打卡

125 阅读1分钟

题目

image.png

题解

  • 我在不知道用栈解法之前对这个题无从下抓,当我知道这种解法的时候,只一次我每次都能正确的写出这个题解,很好理解。
  • 初始化一个栈,循环整个字符,当发现是 “(” 和 “[” 和 “{” 依次往栈里面对应的另一半也就是“)”和 “]” 和 “}” 。
  • 除过这三种情况判断栈是否空了,如果是空那么就是我有右括号,你栈里面没有对应的左括号,如果不为空让栈顶元素出栈,和当前元素比较,如果不相等那么就是当前这一对括号不匹配,这两种情况都返回false。
  • 反之栈不为空,栈顶元素和当前循环的值相等说明匹配上了,继续用相同的方法匹配下一个值。整个循环完之后如果栈是空的说明正好全部匹配完返回true,如果栈不是空说明有多余的左括号返回false。

图解

image.png

代码

public boolean isValid(String s) {
    Stack<Character> stack = new Stack<Character>();
    for (char c : s.toCharArray()) {
        if (c == '(')
            stack.push(')');
        else if (c == '{')
            stack.push('}');
        else if (c == '[')
            stack.push(']');
        else if (stack.isEmpty() || stack.pop() != c)
            return false;
    }
    return stack.isEmpty();
}

备注

本文正在参与「掘金 2021 春招闯关活动」, 点击查看