一道算法题05

本文探讨了如何解决LeetCode中的有效括号问题,介绍了两种方法:成对去除法和栈的应用,通过实例展示了如何判断给定字符串中括号的有效性。
🍣一道算法题🏵
题目:给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

示例 1:
输入:s = "()"
输出:true

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

示例 3:
输入:s = "(]"
输出:false

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses

解法一:成对去除法(好用)

//方法部分:
 private static boolean method(String br) {
        //提高效率
        if(br==null||br.length()==0||br.startsWith(")")||br.startsWith("]")||br.startsWith("}")){
            return false;
        }
        //通过循环去除符合条件的括号
        while(br.contains("()")||br.contains("[]")||br.contains("{}")){
            System.out.println(br);
            if(br.contains("()")){
                br=br.replace("()","");
            }else if(br.contains("[]")){
                br= br.replace("[]","");
            }else if(br.contains("{}")){
                br=br.replace("{}","");
            }
        }
        if(br.length()==0){
            return true;
        }
        return false;
    }
//========================测试部分=======================================
   public static void main(String[] args) throws IOException {
        //通过流获取用户输入的字符串
        System.out.println("请输入字符串:");
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        //成对去除法
       boolean is=method(br.readLine());
       System.out.println(is);
    }

测试结果:::

在这里插入图片描述


解法二:使用栈

  • 通过栈,栈内只存’(’’{’’[’,与栈顶元素进行判断,最后返回值要看栈内有没有元素
 //栈方法
    private static boolean method01(String readLine) {
        //提高效率
        if(readLine==null||readLine.length()<2||readLine.startsWith(")")||readLine.startsWith("]")||readLine.startsWith("}")){
            return false;
        }
        //创建一个栈对象
        Stack<Character> sc=new Stack<>();
        for (Character ch: readLine.toCharArray()) {
            if(ch=='['||ch=='('||ch=='{'){
                sc.push(ch);
            }else if(sc.isEmpty()){//防止括号不对()))
                return false;
            }else{
                Character pop=sc.pop();//获取栈顶元素
                //这里的判断要注意
                if(!(pop=='{'&&ch=='}'||pop=='['&&ch==']'||pop=='('&&ch==')')){
                    return false;
                }
            }
        }
        return sc.isEmpty();//只要栈里不是空就代表true
    }

结果:

在这里插入图片描述


🍤🍤🍤(⊙﹏⊙)!!!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

每日小新

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

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

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

打赏作者

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

抵扣说明:

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

余额充值