20. 有效的括号 [简单]

49 阅读1分钟

题目

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

有效字符串需满足:

  • 左括号必须用相同类型的右括号闭合。
  • 左括号必须以正确的顺序闭合。
  • 来源:力扣(LeetCode)
  • 链接:leetcode-cn.com/problems/va…
  • 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解法

思路

  • 先判断长度是不是奇数,如果是直接返回false
  • 应用栈。

代码

    public boolean isValid(String s) {
        int n = s.length();
        if (n % 2 != 0) {
            return false;
        }

        Map<Character, Character> map = new HashMap<>();
        map.put(')', '(');
        map.put(']', '[');
        map.put('}', '{');

        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < n; i++) {
            Character c = s.charAt(i);
            if (map.containsKey(c)) {
                if (stack.isEmpty() || stack.pop() != map.get(c)) {
                    return false;
                }
            } else {
                stack.push(c);
            }
        }
        return stack.isEmpty();
    }

update20220518

    public boolean isValid(String s) {
        char[] chars = s.toCharArray();
        int n = chars.length;
        if (n % 2 != 0) {
            return false;
        }
        Stack<Character> stack = new Stack<Character>();
        for (int i = 0; i < n; i++) {
            if (chars[i] == '(' || chars[i] == '[' || chars[i] == '{') {
                stack.push(chars[i]);
            } else {
                if (stack.isEmpty()) {
                    return false;
                }
                char c = stack.pop();
                if ((chars[i] == ')' && c == '(') || 
                    (chars[i] == ']' && c == '[') ||
                    (chars[i] == '}' && c == '{')) {
                        continue;
                } else {
                    return false;
                }
            }
        }
        return stack.isEmpty();
    }