力扣hot100:有效的括号

题目描述:

解题思路:

栈先入后出特点恰好与本题括号排序特点一致,即若遇到左括号入栈,遇到右括号时将对应栈顶左括号出栈,则遍历完所有括号后 stack 仍然为空;

建立哈希表 dic 构建左右括号对应关系:key 左括号,value 右括号;这样查询 2 个括号是否对应只需 O(1) 时间复杂度;建立栈 stack,遍历字符串 s 并按照算法流程一一判断。

算法流程

如果 a 是左括号,则入栈 push;

否则通过哈希表判断括号对应关系,若 stack 栈顶出栈括号 stack.pop() 与当前遍历括号 c 不对应,则提前返回 false。

代码:

java 复制代码
class Solution {
    private static final Map<Character,Character> map=new HashMap<Character,Character>();
    static{
        map.put('{','}');
        map.put('[',']');
        map.put('(',')');
        map.put('?','?');
    }
    public boolean isValid(String s) {
        if(s.length()>0&&!map.containsKey(s.charAt(0))){
            return false;
        }
        LinkedList<Character> stack=new LinkedList<Character>();
        stack.add('?');
        for(Character a:s.toCharArray()){
            if(map.containsKey(a)){
                stack.addLast(a);
            }
            else if(map.get(stack.removeLast())!=a){
                return false;
            }
        }
        return stack.size()==1;
    }
}

代码解析:

本题用链表代替栈的结构,入栈对应stack.addLast(a);,出栈对应stack.removeLast()。

相关推荐
tachibana26 分钟前
hot100 数组中的第K个最大元素(215)
java·数据结构·算法·leetcode
txzrxz15 分钟前
单调队列讲解
数据结构·c++·算法·单调队列
不会就选b1 小时前
算法日常・每日刷题--<快排>4
算法
Keven_111 小时前
算法札记:树状数组的用途
数据结构·算法
用户677437175811 小时前
C++函数参数传递方式详解:string、string&、const string、const string&该怎么选?
算法
cpp_25012 小时前
P1540 [NOIP 2010 提高组] 机器翻译
数据结构·c++·算法·队列·noip·洛谷题解
晚笙coding2 小时前
LeetCode 98:验证二叉搜索树 —— 从局部判断到全局范围约束的递归思想
算法·leetcode·职场和发展
学计算机的计算基2 小时前
回溯算法下篇:四道经典题讲透约束剪枝、原地标记、预计算与状态压缩
java·笔记·算法
霸道流氓气质2 小时前
SpringBoot中实现告警判定算法-位报警与模拟量阈值-技术详解
spring boot·算法·jquery
行者全栈架构师2 小时前
混元 Hy3 Agent 实战:季度报告 3 小时变 40 分钟
算法·架构·代码规范