leetcode-有效的括号

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

有效字符串需满足:

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

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

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

示例 1:

输入:s = "()"

输出:true

示例 2:

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

输出:true

示例 3:

输入:s = "(]"

输出:false

示例 4:

输入:s = "(\[\])"

输出:true

示例 5:

输入:s = "()"

输出:false

提示:

1 <= s.length <= 104

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

思路 :考察栈的使用。栈是维护一个区间中满足某些条件的状态的数据结构。区间可以是整个数组,也可以是数组的一部分。

对于本题,栈内的基本元素是单个字符,所以遍历整个字符串,根据当前字符的情况,判断出栈入栈即可。
代码

c 复制代码
class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        for(int i = 0;i<s.length();i++){
            Character c = s.charAt(i);
            if(c=='('||c=='['||c=='{'){
                stack.push(c);
            }else{
                if(stack.isEmpty()){
                    return false;
                }else{
                    if((c==')'&&stack.peek()=='(')
                    || (c==']'&&stack.peek()=='[')
                    || (c=='}'&&stack.peek()=='{')){
                        stack.pop();
                    }else{
                        return false;
                    }
                }
            }
        }
        if(stack.isEmpty()){
            return true;
        }
        return false;
    }
}
相关推荐
啊哈一半醒8 小时前
Windows 虚拟机搭建 CentOS 全过程(2026 最新版 + 踩坑解决)
linux·windows·centos
wunaiqiezixin8 小时前
MIT 6.S081 lazy 前置篇(lab5):缺页异常、惰性分配、写时复制、页面换出
linux·unix·os·xv6·mit6.s081
地平线开发者8 小时前
征程6工具链模型X86推理方式说明
算法
Benszen8 小时前
云计算基础-13:Linux网络管理实战-1
linux·运维·云计算
地平线开发者8 小时前
【征程6】校准量化中HistogramObserver解析
算法
_kerneler9 小时前
Linux tiny RCU
linux
OuO-29 小时前
笔试强训 Day 34:ISBN 号码、kotori 和迷宫、矩阵最长递增路径
java·算法·矩阵
程序喵大人9 小时前
【C++进阶】STL算法与函数对象 - 04 find、count和any_of把查询写成意图
开发语言·c++·算法
豆沙沙包?9 小时前
c++中引用(P7-P11)
java·c++·算法
wuminyu10 小时前
虚拟线程底层ForkJoinPool的工作窃取算法机制
java·linux·c语言·jvm·c++