zoukankan      html  css  js  c++  java
  • 有效括号

    Leetcode题目描述

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

    有效字符串需满足:

    左括号必须用相同类型的右括号闭合。
    左括号必须以正确的顺序闭合。
    注意空字符串可被认为是有效字符串。

    示例 1:

    输入: "()"
    输出: true
    

    示例 2:

    输入: "([)]"
    输出: false
    

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/valid-parentheses

    栈解答

    经典的括号问题,在类似成双匹配对的机制,可以采用Hashmap进行对应存储。然后使用栈进行一一匹配,判断栈时是否为空而已。

    • 特性一:无论字符串中有什么样的元素,如果是出现奇数个,那么一定是不匹配的。
    • 特性二:减少大量if-else语句的方式可以采用哈希表的方式转换对应。

    Demo

    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>() {{
                put(')', '(');
                put(']', '[');
                put('}', '{');
            }};
            Deque<Character> stack = new LinkedList<Character>();
            // 入栈判断,左符号入栈
            for (int i = 0; i < n; i++) {
                char 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();
        }
    }
    

    小结

    使用栈

    Deque<Character> stack = new LinkedList<Character>(); // 可以创建的一种方式
    Stack<Character> stack = new Stack<Character>(); //两种方式都可以创建
    

    栈的基本函数

    Peek() 查看栈顶元素但不删除
    Pop() 返回栈顶元素并且删除
    push(c) 元素c推入栈顶
    

    减法 默认闭区间 5-3 =2

  • 相关阅读:
    大数据
    优化
    gnu
    sed
    hadoop部署
    安装 zookeeper
    ansible
    ssh 配置无密码登录
    未完待续
    解正向代理、反向代理、透明代理
  • 原文地址:https://www.cnblogs.com/Di-iD/p/13784715.html
Copyright © 2011-2022 走看看