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;
    }
}
相关推荐
We་ct2 小时前
LeetCode 102. 二叉树的层序遍历:图文拆解+代码详解
前端·算法·leetcode·typescript
历程里程碑2 小时前
26信号处理一:从闹钟到进程控制的奥秘
linux·运维·服务器·开发语言·c++·算法·排序算法
Gofarlic_OMS2 小时前
LS-DYNA许可证全局状态及集群计算资源使用可视化监控大屏
运维·开发语言·算法·matlab·自动化
载数而行5202 小时前
算法系列4之插入排序
数据结构·c++·算法·排序算法
会员果汁2 小时前
二分搜索-C
c语言·算法
智者知已应修善业2 小时前
【查找指定字符串首位置与数量不区分大小写完整匹配】2025-5-3
c语言·c++·经验分享·笔记·算法
fengfuyao9852 小时前
基于局部均值分解(LMD)的MATLAB信号分解程序实现
算法·matlab·均值算法
㓗冽2 小时前
分割数字并排序(字符串)-基础题103th + A == B ?(字符串)-基础题104th + 母牛制造的回文(字符串)-基础题105th
算法
老师用之于民2 小时前
【DAY25】线程与进程通信:共享内存、同步机制及实现方案
linux·c语言·ubuntu·visual studio code