栈与队列——3.力扣题目:20. 有效的括号

题目链接

解析:(括号匹配和栈的原理一样)

题目要求:给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。

大体思路:遍历字符串

①遇到左括号,压入栈

②遇到右括号,出栈,若出栈元素和右括号不匹配,返回false。(遇到右括号,如果栈为空,肯定也是false)

③遍历完了,栈为空才返回true。因为扩号是成对出现,有多少个左括号压入,就有多少个右括号弹出。

注意点:

​ 遇到左括号时,压入栈的可以设为右括号。这样后面比较时,直接比较栈内的右括号和当前的右括号是否匹配即可。这样做方便一些。

代码:
class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        for (char i : s.toCharArray()) {
            if (i == '(') stack.push(')');
            if (i == '[') stack.push(']');
            if (i == '{') stack.push('}');
            if (i == ')') {
                if (stack.isEmpty()) return false;
                if (stack.pop() != ')') return false;
            }
            if (i == ']') {
                if (stack.isEmpty()) return false;
                if (stack.pop() != ']') return false;
            }
            if (i == '}') {
                if (stack.isEmpty()) return false;
                if (stack.pop() != '}') return false;
            }            
        }
        return stack.isEmpty();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值