[LeetCode No.20] 有效的括号

题目

题解

方法一:
用两个栈,一个存储左括号,一个存右括号。
如果是左括号,直接入栈
如果是右括号,先入栈,然后判断
1° 左括号栈是否为空
2° 左括号栈取出的左括号是否能和右括号栈顶括号匹配
若可以,则左右括号同时出栈

最后判断左右括号栈是否同时为空

方法二:
一个栈,用于存储左括号
左括号则入栈
如果遇到右括号,判断栈是否为空,是否栈顶左括号能与右括号匹配
如不能则返回false
否则匹配成功把左括号出栈

最后判断,左括号栈是否为空

代码

方法一:

class Solution {
    public static boolean isValid(String s) {

        int len = s.length();

        if (s.isEmpty()||s==""){
            return true;
        }
        if (len%2==1)
            return false;

        Map<Character,Character> valid = new HashMap<Character, Character>();
        valid.put('(',')');
        valid.put('{','}');
        valid.put('[',']');
        //"([}}])"
        Deque<Character> left = new ArrayDeque<Character>();
        Deque<Character> right = new ArrayDeque<Character>();
        for(int i = 0; i < len; i++){
            char temp = s.charAt(i);
            if (valid.containsKey(temp)){
                left.addLast(temp);
            }
            else{
                right.addLast(temp);
                if (!left.isEmpty()&&valid.get(left.peekLast()) == temp){
                    left.pollLast();
                    right.pollLast();
                }
            }
        }
        return left.isEmpty()&&right.isEmpty();
    }


}

方法二:

public class Solution2 {
    public static boolean isValid(String s) {
        int length = s.length();

        if (length%2 == 1){
            return false;
        }

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


        for (int i = 0; i < length; i++) {
            char ch = s.charAt(i);
            if (map.containsKey(ch)){
                stack.push(ch);
            }else{
                if (stack.isEmpty()||map.get(stack.peek())!=ch){
                    return false;
                }
                stack.pop();
            }
        }

        return stack.isEmpty();
    }
}
posted @ 2020-12-26 22:31  饼先生  阅读(93)  评论(0编辑  收藏  举报