括号匹配问题:判断一个字符串是否为有效的括号匹配

括号匹配问题:判断一个字符串是否为有效的括号匹配?

提示:系列括号匹配问题


题目

括号匹配有效的的情况:
有一个左,必然有一个右
每一个左与一个右匹配

问:如何判断一个字符串是有效的括号匹配?


一、审题

示例:()
(())
(()())
下面都不是有效的
(
)()
(()()


从左往右记录左右括号的数量,对消,如果最后无法对冲,那就是有问题

count=0
如果遇到(,count+=
如果遇到),count–
在这里插入图片描述

途中要是发现count<0提前说明)多一个,且,左边没法匹配
最后发现count不为0的话,显然没法匹配,不管是)多了,还是(多了

手撕代码:

    //复习:
    public static boolean isValidReview(String s){
        if (s.compareTo("") == 0 || s.length() == 0) return true;

        char[] str = s.toCharArray();
        int N = str.length;

        int count = 0;
        for (int i = 0; i < N; i++) {
            if (str[i] == '(') count++;
            else count--;//遇到)

            if (count < 0) return false;//提前说明)过多了
        }

        return count == 0 ? true : false;//非0false
    }

    public static void test(){
        String s = "())(()))(";//需要补3个
        System.out.println(isValid(s));
        System.out.println(isValidReview(s));
        System.out.println(addNeedBracket(s));
    }

    public static void main(String[] args) {
        test();
    }

问题不大:

false
false

总结

提示:重要经验:

1)括号匹配本质就是看左右括号的数量是否一直,而且,)有括号还不能提前多出现!
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

冰露可乐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值