关于括号匹配的算法,自用修改版({,[,()

括号匹配算法,自用修改版({,[,()

修改点

网上的很多匹配方法对于“{}}}{{{}”类似这种类型的无法正确处理,于是我自己加了一个判断:如果字符串前一半中右括号个数大于左括号个数直接返回false。
为了减少代码量,所以使用java,代码如下:

代码

public static boolean matching(String str){
        Stack<Character> st= new Stack();
        int left_num = 0;
        int right_num = 0;

        //自己所加的判断
        for(int l = 0; l < (str.length()/2); l++)
        {
            if(str.charAt(l) == '{' || 
                    str.charAt(l) == '[' ||
                    str.charAt(l) == '(')
            {
                left_num++;
            }
            else
            {
                right_num++;
            }
        }
        if(right_num > left_num)
        {
            System.out.println("个数不符合" +  "left_num: " + left_num + ", right_num: " + right_num);
            return false;
        }


        //以下是主流算法
        for(int i = 0; i <str.length(); i++)
        {
            if(str.charAt(i) == '{' || 
                    str.charAt(i) == '[' ||
                            str.charAt(i) == '(')
            {
                st.push(str.charAt(i));
            }
        }
        for(int j = 0; j <str.length(); j++)
        {
            switch(str.charAt(j))
            {
            case ')':
                if(st.pop() != '(')
                {
                    System.out.println("第" + (j+1) +"处" +")不匹配");
                    return false;
                }
                break;
            case ']':
                if(st.pop() != '[')
                {
                    System.out.println("第" + (j+1) +"处" +"]不匹配");
                    return false;
                }
                break;
            case '}':
                if(st.pop() != '{')
                {
                    System.out.println("第" + (j+1) +"处" +"}不匹配");
                    return false;
                }
                break;
            default:
                break;                  
            }
        }
        if(st.isEmpty() != true)
        {
            System.out.println("栈不为空");
            return false;
        }else
        {
            return true;
        }
    }

    public static void main(String[] args) {    
        System.out.println(matching("{}}}{{{}"));
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值