• [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();
        }
    }
    
  • 相关阅读:
    Request Payload 和 Form Data 的区别
    es6 字符串模板拼接和传统字符串拼接
    TypeScript
    Jquery的$(document).click() 在iphone手机上失效的问题
    Vuex 是什么?
    什么是JSONP?
    git 放弃本地修改操作
    CSS3+HTML5+JS 实现一个块的收缩&展开动画
    Promise学习笔记(一)
    React@16.13.1配合antd UI使用,自定义主题
  • 原文地址:https://www.cnblogs.com/Mr-BING/p/14194744.html
Copyright © 2020-2023  润新知