Leet code 20.有效括号区配

问题描述

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号

解题思路

    利用栈来实现,当出现左括号时入栈,当出现右括号时看栈内的括号是否配对,当遍完后如果栈为空则是有效,栈不为空则无效。

代码实现

class Solution {
   public static boolean isValid(String s) {
        // 只有一个括号肯定不合法
        if (s.length() == 1) {
            return false;
        }
        char[] chars = s.toCharArray();
        if (chars[0] == '}' || chars[0] ==']' || chars[0] == ')') {
            return false;
        }
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] == '{' || chars[i] == '[' || chars[i] =='(') {
                stack.push(chars[i]);
            } else {
                Character peek = null;
                if (stack.isEmpty()) {
                    return false;
                } else {
                    peek = stack.pop();
                }
                if (chars[i] == '}') {
                    if (peek != '{') {
                        return false;
                    }
                } else if (chars[i] ==']') {
                    if (peek != '[') {
                        return false;
                    }
                } else if (chars[i] ==')') {
                    if (peek != '(') {
                        return false;
                    }
                }
            }
        }
        return stack.isEmpty();
    }
}

实现细节

如果只现一个括号肯定是无效直接返回,如果第一个元素是右括号,可直接判定是无效。
出现左括号直接入栈,如果出现右括号,看栈中是否有元素,如果没有元素则无效,如果有元素查看括号是否配对。当执行完后看栈中是否存在元素如果存在如是无效,栈空则是有效。

posted @ 2022-11-23 20:51  wzpro  阅读(21)  评论(0)    收藏  举报