题目描述

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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例 1:
输入: "()"
输出: true

示例 2:
输入: "()[]{}"
输出: true

示例 3:
输入: "(]"
输出: false

示例 4:
输入: "([)]"
输出: false

示例 5:
输入: "{[]}"
输出: true

解决方法

合法的括号特征:当右括号出现,则紧靠其左边必有对应的左括号
具体做法:

  1. 利用一个栈记录遍历到的左括号对应的右括号
  2. 当右括号出现,若栈顶与右括号一致则合法,反之不合法
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();

        for (int i = 0, len = s.length(); i < len; i++) {
            char ch = s.charAt(i);
            if (ch == '(')
                stack.add(')');
            else if (ch == '{')
                stack.add('}');
            else if (ch == '[')
                stack.add(']');
            else if (stack.isEmpty() || stack.pop() != ch)
                return false;
        }

        return stack.isEmpty();
    }

本文首发:https://lierabbit.cn/2018/09/...


LieRabbit
920 声望2.6k 粉丝

有些梦虽然遥不可及,但并不是不可能实现,只要我足够的强