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();
    }
}
实现细节
如果只现一个括号肯定是无效直接返回,如果第一个元素是右括号,可直接判定是无效。
出现左括号直接入栈,如果出现右括号,看栈中是否有元素,如果没有元素则无效,如果有元素查看括号是否配对。当执行完后看栈中是否存在元素如果存在如是无效,栈空则是有效。

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号