栈-E20-有效的括号

题目

  • 概述:给你一个只包含括号的字符串,判断该字符串中括号是否正确闭合,正确闭合的条件如下:
  1. 左括号必须与相同类型的右括号闭合
  2. 所有括号都按正确的顺序闭合
  3. 空字符串也算正确闭合
  • 输入:只包含括号的字符串

  • 输入子项:'(','{','[',')','}',']'

  • 输出:正确闭合为true,反之false

思路

  • 由于每次判断是否闭合都要看前面的一个括号,可以考虑用栈来实现
  1. 如果输入类型是左括号类型则直接入栈
  2. 如果输入类型是右括号则看栈顶元素是否是相同类型的左括号,若是则将左括号出栈,反之就是错误闭合

注意:若栈中没有元素也是错误闭合

  1. 最后看栈中是否有多余的元素,如果有则错误闭合,反之则正确闭合

代码

class Solution {
    public boolean isValid(String s) {
        LinkedList stack = new LinkedList<>();
        Map map = new HashMap<>();
        map.put('(', ')');
        map.put('[', ']');
        map.put('{', '}');
        for (char c : s.toCharArray()) {
            switch (c) {
                case '(':
                case '{':
                case '[':
                    stack.push(c);
                    break;
                case ')':
                case '}':
                case ']':
                    if (stack.isEmpty()) {
                        return false;
                    }
                    if (map.get(stack.peek()) != c) {
                        return false;
                    } else {
                        stack.pop();
                    }
                    break;
            }
        }
        return stack.isEmpty();
    }
}

你可能感兴趣的:(栈-E20-有效的括号)