Leetcode20 (有效的括号)

题目描述

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

有效字符串需满足:

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

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

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

示例 1:

输入:s = "()"

输出:true

示例 2:

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

输出:true

示例 3:

输入:s = "(]"

输出:false

示例 4:

输入:s = "([])"

输出:true

提示:

1 <= s.length <= 104

s 仅由括号 '()[]{}' 组成

题解1

相当经典的一道题

就是用栈

遍历s,当前为左括号时,直接入栈

当前为右括号判断栈顶元素是否为对应左括号

小点:

1、可以直接判断s长度,如果为奇数直接返回false

2、需要判断时,栈顶元素为空,直接返回false

代码:

sql 复制代码
class Solution {
    public boolean isValid(String s) {
        if(s.length()%2==1) return false;
        Deque<Character> stack =new ArrayDeque<>();
        Map<Character,Character> map=new HashMap<>();
        map.put(')','(');
        map.put(']','[');
        map.put('}','{');
        int len=s.length();
        for(int i=0;i<len;i++){
            char ch=s.charAt(i);
            if(map.containsKey(ch)){
                if(stack.isEmpty()||map.get(ch)!=stack.peek()) return false;
                stack.pop();
            }
            elsestack.push(ch);
        }
       return stack.isEmpty();
    }
}

题解2

看了一眼最优解

发现可以用数组模拟栈

并且用s.toCharArray()作为这个栈

可以实现栈的同时在这个数组上读取数据

性能极好

sql 复制代码
class Solution {
    public boolean isValid(String s) {
        int len=s.length();
        if(len%2==1) return false;
        char[] stack = s.toCharArray();
        int i=0,j=0;
        while(i<len){
            if(stack[i]==')'&&j>0&&stack[j-1]=='(') j--;
            else if(stack[i]==']'&&j>0&&stack[j-1]=='[') j--;
            else if(stack[i]=='}'&&j>0&&stack[j-1]=='{') j--;
            else stack[j++]=stack[i];
            i++;
        }
        return j==0;
    }
}
相关推荐
_OP_CHEN4 分钟前
C++进阶:(七)红黑树深度解析与 C++ 实现
开发语言·数据结构·c++·stl·红黑树·红黑树的旋转·红黑树的平衡调整
小O的算法实验室11 分钟前
2025年TRE SCI1区TOP,随机环境下无人机应急医疗接送与配送的先进混合方法,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
9号达人17 分钟前
普通公司对账系统的现实困境与解决方案
java·后端·面试
超级苦力怕20 分钟前
Java 为何 long a = 999999999 能过;long a = 9999999999 报错?一文讲透“宽化转换”
java
佐杰25 分钟前
Jenkins使用指南1
java·运维·jenkins
dllxhcjla36 分钟前
三大特性+盒子模型
java·前端·css
小白程序员成长日记38 分钟前
2025.11.06 力扣每日一题
算法·leetcode
Acrelhuang40 分钟前
筑牢用电防线:Acrel-1000 自动化系统赋能 35kV 园区高效供电-安科瑞黄安南
java·大数据·开发语言·人工智能·物联网
脸大是真的好~44 分钟前
黑马JAVAWeb-10 文件上传-文件存储到服务器本地磁盘-文件存储在阿里云OSS-@Value属性注入
java
不穿格子的程序员1 小时前
从零开始写算法-栈-最小值(记忆化pair)
数据结构·