栈算法之【有效括号】

目录

LeetCode-20题


LeetCode-20题

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。

左括号必须以正确的顺序闭合。

每个右括号都有一个对应的相同类型的左括号。

java 复制代码
class Solution {
    public boolean isValid(String s) {
        // check
        if (s == null || s.length() < 2)
            return false;
        
        // map的key表示左括号,value表示右括号
        Map<Character, Character> cache = new HashMap<>();
        cache.put('(', ')');
        cache.put('{', '}');
        cache.put('[', ']');
        
        // 借助LinkedList实现的栈
        LinkedList<Character> stack = new LinkedList<>();
        for (int i = 0; i < s.length(); i++) {
            char curr = s.charAt(i);
            if (cache.containsKey(curr)) {
                // 如果是左括号,就将其对应的右括号入栈
                stack.push(cache.get(curr));
            } else {
                // 如果是右括号
                if (!stack.isEmpty() && stack.peek() == curr) {
                    // 此时栈不为空,且栈顶元素就是当前的右括号,执行出栈操作
                    stack.pop();
                } else {
                    return false;
                }
            }
        }
        
        // 此时栈空了就表示s是有效括号
        return stack.isEmpty();
    }
}
相关推荐
SimonKing13 分钟前
SpringBoot 集成 SSE 实现服务端推送或可代替Websocket
java·后端·程序员
不正经的码狗15 分钟前
JAVA 、Eclipse 安装及配置 JAVA 项目(无需配置环境)
java·eclipse
xiaoqiMikko24 分钟前
你升的是 jackson-databind,中招的是 jackson-core:一个超长 JSON key 就能吃掉 200MB 堆
java·安全
不正经的码狗28 分钟前
Eclipse汉化(快速,推荐)
java·eclipse
极客互动API30 分钟前
极客互动-企业微信基于外部API接口实现AI客服自动接管外部联系人消息收发
java·微信·企业微信·ai编程·rpa
Sam_Deep_Thinking31 分钟前
关于java final关键字的可见性
java·后端·面试·程序员
tryxr33 分钟前
矩阵的几种基础变换
java·数据结构·算法·矩阵
写后端的胖头鱼34 分钟前
如何区分IO/CPU 密集型,线程池核心参数怎么设置
java·线程池·多线程·io密集·cpu密集
mmmmath_337 分钟前
LeetCode.028.找出字符串中第一个匹配项的
数据结构·算法·leetcode
Selvaggia1 小时前
DMD(Distribution Matching Distillation,分布匹配蒸馏)
算法