LeetCode20—有效的括号 (java版)

题目描述:

标签:栈  字符串 

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

代码:

思路分析:

1、特殊分析:括号成双成对,字符串长度一定为偶数,所以长度为奇数的字符串一定不是有效括号字符串。

2、建一个栈,遇到左括号时压入栈中,遇到右括号时,判断此时栈是不是空或者栈顶的括号是否配对,如果真则返回false,如果假则将栈顶的元素弹出与当前右括号配对。

3、最后判断栈是否为空,来看所有括号是否都配对完,如果为空说明该字符串是有效括号字符串。

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

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

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

猜你喜欢

转载自blog.csdn.net/qq_40840749/article/details/114550168
今日推荐