LeetCode热题100--20. 有效的括号--简单

题目

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

有效字符串需满足:

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

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

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

示例 1:

输入:s = "()"

输出:true

示例 2:

输入:s = "()[]{}"

输出:true

示例 3:

输入:s = "(]"

输出:false

示例 4:

输入:s = "([])"

输出:true

示例 5:

输入:s = "([)]"

输出:false

题解

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

解析

出自:有效的括号(辅助栈法,极简+图解)

java 复制代码
class Solution  {
    private static final Map<Character,Character> map = new HashMap<Character,Character>(){{
        put('{','}'); put('[',']'); put('(',')'); put('?','?'); //这行代码初始化了一个HashMap,用于存储左括号及其对应的右括号。
    }};
    
    public boolean isValid(String s) {      //这是一个名为isValid的方法,用于判断输入字符串s是否含有有效的一组括号。
        if(s.length() > 0 && !map.containsKey(s.charAt(0))) return false;  //这行代码检查s的第一个元素是否不是左括号,如果是则返回false。
        
        LinkedList<Character> stack = new LinkedList<Character>() {{ add('?'); }};   //这是一个链表stack,用于存储字符串中的括号。初始化时加了一个虚拟的元素'?'。
        
        for(Character c : s.toCharArray()) {      //这行代码将输入字符串s转化为字符数组进行逐个遍历。
            if(map.containsKey(c)) stack.addLast(c);       //如果当前字符是一个左括号,将其添加到stack的末尾。
           else if(map.get(stack.removeLast()) != c) return false;  //如果是右括号,则从栈中弹出最后一个元素并与之比较;如果不匹配返回false。
         }
        return stack.size() == 1;       //在遍历结束后,这行代码判断stack的大小是否为1。如果是则表示所有的左括号都找到了自己的右括号,因此s是一个有效的字符串,方法应返回true;如果不是则表示还有未匹配的左括号,所以s不是一个有效的字符串,方法应返回false。
     }  
}
相关推荐
Piar1231sdafa36 分钟前
基于yolo13-C3k2-RVB的洗手步骤识别与检测系统实现_1
人工智能·算法·目标跟踪
做科研的周师兄37 分钟前
【MATLAB 实战】|多波段栅格数据提取部分波段均值——批量处理(NoData 修正 + 地理信息保真)_后附完整代码
前端·算法·机器学习·matlab·均值算法·分类·数据挖掘
坐怀不乱杯魂37 分钟前
Linux - 进程控制
linux·运维·服务器
天赐学c语言1 小时前
1.18 - 滑动窗口最大值 && 子类的指针转换为父类的指针,指针的值是否会改变
数据结构·c++·算法·leecode
重生之绝世牛码1 小时前
Linux软件安装 —— zookeeper集群安装
大数据·linux·运维·服务器·zookeeper·软件安装
额1291 小时前
磁盘物理卷、卷组、逻辑卷管理
linux·运维·服务器
Maggie_ssss_supp1 小时前
Linux-正则表达式
linux·运维·正则表达式
重生之绝世牛码1 小时前
Linux软件安装 —— kafka集群安装(SASL密码验证)
大数据·linux·运维·服务器·分布式·kafka·软件安装
甄心爱学习1 小时前
KMP算法(小白理解)
开发语言·python·算法
努力的小帅1 小时前
Linux_多线程(Linux入门到精通)
linux·多线程·多进程·线程同步·线程互斥·生产消费者模型