栈算法之【有效括号】

目录

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();
    }
}
相关推荐
Funcy7 分钟前
XxlJob 源码分析04:admin与executor通讯
java
托比-马奎尔11 分钟前
初识SpringBoot
java·spring boot·后端
前行的小黑炭18 分钟前
Android :如何提升代码的扩展性,方便复制到其他项目不会粘合太多逻辑,增强你的实战经验。
android·java·kotlin
-凌凌漆-19 分钟前
【Qt】【C++】虚析构函数及 virtual ~Base() = default
java·c++·qt
Flash.kkl27 分钟前
优先算法——专题十一:字符串
算法
凯尔萨厮31 分钟前
Java学习笔记四(继承)
java·笔记·学习
Mr_Xuhhh36 分钟前
项目-sqlite类的实现
java·jvm·sqlite
孫治AllenSun1 小时前
【Springboot】介绍启动类和启动过程
java·spring boot·后端
励志码农5 小时前
JavaWeb 30 天入门:第二十三天 —— 监听器(Listener)
java·开发语言·spring boot·学习·servlet