算法通关村-有效的括号问题解析

题目:

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

        有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。
实例1:
输入:s = "()"
输出:true

实例2:
输入:s = "()[]{}"
输出:true

实例3:
输入:s = "(}"
输出:false

解析:

        在上期中我们讲到了栈的定义,创建以及栈的操作等知识。很明显,这个问题可以使用栈来进行解决。

思路

  1. 观察题目要求,左括号必须有右括号闭合。并且括号的顺序不能随意改变的,比如:“[{}()]”是可以的,但是“[{}(])”是不可以的。
  2. 这里我们发现只有三种类型的括号,那么假设我们先遇到的是左括号那么下一个是不是就是对应的右括号。
  3. 我们定义一个栈,将字符串转成字符数组进行遍历,若遇到的是左括号就将对应的右括号入栈,如果不是左括号就将当前的字符与栈顶元素进行比较并pop(),若不等于则直接返回FALSE,否则继续遍历。
  4. 最后返回栈是否为空,空的话则是true,反之是false。

代码

    public boolean isValid(String s) {
        Stack<Character>stack = new Stack<Character>();
        for(char c: s.toCharArray()){
            if(c=='(')stack.push(')');
            else if(c=='[')stack.push(']');
            else if(c=='{')stack.push('}');
            else if(stack.isEmpty()||c!=stack.pop())
            return false;
        }
        return stack.isEmpty();
    }

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值