有效的括号

题目描述

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
示例 4:
输入:s = “([)]”
输出:false
示例 5:
输入:s = “{[]}”
输出:true

代码

class Solution {
    public boolean isValid(String s) {
        Deque<Character>  stack=new ArrayDeque<>();//初始栈
        /*在入栈之前,我们要把出现在左边的左括号要入栈,把出现在右边的右括号要与入栈的左括号进行比较,
        * 所以在入栈之前要进行判断,既然是匹配的出现,我们可以用Hashsmap,具体实现见代码*/
        HashMap<Character,Character> hashMap=new HashMap<>();
        hashMap.put(')','(');//以右括号为键,以左括号为值
        hashMap.put(']','[');
        hashMap.put('}','{');
        int length=s.length();
        if(length%2!=0) return false;//既然是成对出现,那么出现的字符串应该是偶数
        for(int i=0;i<length;i++){
            char ch=s.charAt(i);
            if(hashMap.containsKey(ch)){
                if(stack.isEmpty()||stack.peek()!=hashMap.get(ch)){//在栈中没有找到匹配的左括号
                    return  false;
                }
                stack.pop();//知道之后就出栈
            }else {//将左括号进行入栈操作
                stack.push(ch);
            }
        }
        return stack.isEmpty();//循环中将不满足的已经去除,如果循环正常结束,那么最后栈中没有任何元素,所以栈为空,返回即可

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

工程人永远在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值