20.有效的括号--力扣(LeetCode)--Java版

刷前必备知识:

数据结构:栈的知识,Java:字符串的处理

题目内容:

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

有效字符串需满足:

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

示例 1:

输入:s = "()"

输出:true

示例 2:

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

输出:true

示例 3:

输入:s = "(]"

输出:false

示例 4:

输入:s = "([])"

输出:true

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

思路分析:

 要判断给定的只包括括号的字符串是否有效,我们可以使用栈(Stack)来实现。这是因为有效的括号序列必须遵循后进先出(LIFO)的原则,刚好符合栈的特点。

1.使用栈:使用Java的Stack类来存储左括号。

2.遍历字符串:遍历输入字符串的每一个字符:

                        a.如果是左括号,就将其推入栈中。

                        b.如果是右括号,首先检查栈是否为空,如果栈为空,说明没有左括号与匹配

                        c.是右括号,且栈不为空,弹出顶栈元素与之匹配

3.类型匹配:确保弹出的左括号与当前的右括号匹配,,如果不匹配,返回false。

4.最终检查:在遍历结束后,检查栈是否为空,,为空,说明所有的括号都已正确匹配。

Java代码实现:

    public  boolean isValid(String s) {
        //创建一个栈来存储左括号
        Stack<Character> stack = new Stack<>();

        //遍历字符串数组
        for(char c : s.toCharArray()){
            //如果遇到左括号,则压入栈中
            if( c == '(' || c == '{' || c == '['){
                stack.push(c);
            }else{
                //如果遇到右括号
                if(stack.isEmpty()){    //判断栈是否为空
                    return false;      //找到一个没有对应左括号的右括号
                }

                //为空,取出顶栈元素进行匹配
                char top = stack.pop();
                if( (c == ')' && top != '(') || (c == '}' && top != '{') || ( c == ']' && top != '[' )){
                    return false;
                }
            }
        }
        return stack.isEmpty();  //判断整个字符串中所有的括号是否都已成功配对和闭合
    }

 复杂度分析:

1.时间复杂度:On,其中n是字符串的长度,每个字符只遍历一次。

2.空间复杂度:On,在最坏的情况下,所有的字符都是左括号。

总结:

根据有序的括号必须遵循后进先出的原则,选择使用栈来灵活解决。

好的到此今日的每天一道力扣结束啦,关注我,和我一起在力扣中成长吧!!![比心][比心]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值