zoukankan      html  css  js  c++  java
  • [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> deque = 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)){
                    deque.addLast(temp);
                }
                else{
                    right.addLast(temp);
                    if (!deque.isEmpty()&&valid.get(deque.peekLast()) == temp){
                        deque.pollLast();
                        right.pollLast();
                    }
                }
            }
            return deque.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();
        }
    }
    
  • 相关阅读:
    思念
    空白
    curl json string with variable All In One
    virtual scroll list All In One
    corejs & RegExp error All In One
    socket.io All In One
    vue camelCase vs PascalCase vs kebabcase All In One
    element ui 表单校验,非必填字段校验 All In One
    github 定时任务 UTC 时间不准确 bug All In One
    input range & color picker All In One
  • 原文地址:https://www.cnblogs.com/Mr-BING/p/14194744.html
Copyright © 2011-2022 走看看