栈算法之【有效括号】

目录

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();
    }
}
相关推荐
找不到、了5 分钟前
Java排序算法之<选择排序>
数据结构·算法·排序算法
是店小二呀10 分钟前
【动态规划-斐波那契数列模型】理解动态规划:斐波那契数列的递推模型
算法·动态规划·代理模式
萌新小白的逆袭18 分钟前
《Maven 核心基础笔记(第一天)》
java·开发语言·spring
一念&20 分钟前
Java泛型
java
小徐不徐说28 分钟前
动态规划:从入门到精通
数据结构·c++·算法·leetcode·动态规划·代理模式
掉鱼的猫29 分钟前
Solon 整合 LiteFlow 规则引擎:概念与实战
java·workflow
她说..30 分钟前
Stream API流学习总结
java
guguhaohao38 分钟前
排序算法,咕咕咕
数据结构·算法·排序算法
橙序员小站39 分钟前
JDK17 前后写法对比:差点没认出是 Java
java·后端