栈算法之【有效括号】

目录

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();
    }
}
相关推荐
上弦月-编程13 分钟前
【C语言逻辑题】谋杀案凶手是谁?——经典矛盾推理题详解
算法
天若有情67325 分钟前
逆向玩家狂喜!用C++野生写法一键破解线性加密(不规范但巨好用)
开发语言·c++·算法
咸鱼翻身小阿橙28 分钟前
Qt QML调用C++注册类
java·c++·qt
逸Y 仙X39 分钟前
文章二十一:ElasticSearch 词项查询与调度查询实战
java·大数据·数据库·elasticsearch·搜索引擎
Bechamz39 分钟前
大数据开发学习Day25
java·大数据·学习
风筝在晴天搁浅1 小时前
剑指Offer 60.n个骰子的点数
算法
ProgramHelpOa1 小时前
Optiver 2026 OA 全面复盘|26NG / Intern 最新高频题型整理
人工智能·算法·机器学习
feifeigo1231 小时前
基于无迹变换的电网概率潮流分析 MATLAB 实现
开发语言·算法·matlab
Java成神之路-1 小时前
【算法刷题笔记】全题型导航目录
笔记·算法