LeetCode 20、有效的括号

2020-06-16  本文已影响0人  南北VS东西

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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
    注意空字符串可被认为是有效字符串。
示例 1:
  输入: "()"
  输出: true
示例 2:
  输入: "()[]{}"
  输出: true
示例 3:
  输入: "(]"
  输出: false
示例 4:
  输入: "([)]"
  输出: false
示例 5:
  输入: "{[]}"
  输出: true

解题思路:利用栈的先进后出原则、属于左括号'(''{''[' 的进行入栈、当出现右括号 ')''}'']'时、看栈顶是否是与之对应的左括号、如果是将栈内对应的左括号弹出、如果不能对应上则表示括号不是对应的。
代码示例:

public boolean isValid(String s) {
        Deque<Character> stack = new ArrayDeque<>();
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '(' || s.charAt(i) == '{' || s.charAt(i) == '[') {
                // 字符串中是左括号进行入栈操作
                stack.push(s.charAt(i));
            } else {
                if (stack.isEmpty()) {
                    return false;
                } else {
                    // 当前字符串是右括号、若栈顶不是与之对应的左括号则表示此字符串无效
                    if (stack.peek() == '(' && s.charAt(i) != ')') {
                        return false;
                    } else if (stack.peek() == '{' && s.charAt(i) != '}') {
                        return false;
                    } else if (stack.peek() == '[' && s.charAt(i) != ']') {
                        return false;
                    }
                    // 符合条件的一组 弹出栈顶 
                    stack.pop();
                }
            }
        }
        // stack.isEmpty() true:字符串括号有效都是对应的 false: 无效 不对应
        return stack.isEmpty();
    }
上一篇下一篇

猜你喜欢

热点阅读