括号匹配

左右括号的匹配问题,可以用栈来很好的解决。
1. 遇到左括号,就入栈。
2. 遇到右括号,判断此时栈是否为空。
* 栈为空,说明右括号多。
* 不为空,判断栈顶元素与该右括号是否对应,不对应,说明不匹配。如{(};若匹配则出栈。
3. 最后,遍历整个Str后,若栈为空,说明完全匹配,若栈不空,说明左括号多。

import java.util.Stack;
public class BracketMatch{
    public static void main(String[] args) {
        String s="{[(2+4)+(3-5)/9]*4+1}*{[(2-4)+(3-5)*9]*(4+1)} ";
        System.out.println(match(s));
    }

    public static boolean match(String s){
        Stack stack=new Stack();
        char c[]=s.toCharArray();
        for (int i=0;i<c.length ;i++ ) {
            if(isLeftBracket(c[i])){
                stack.push(c[i]);
            }else if(isRightBracket(c[i])){
                //如果栈为空,说明右括号多
                if(stack.isEmpty()){
                    return false;
                }else {
                    //判断栈顶的元素是否和右括号是匹配的
                    if(!stack.peek().equals(resverse(c[i]))){
                        return false;
                    }else{
                        //若匹配则将对应的左括号出栈
                        stack.pop();
                    }
                }
            }
        }
        //如果所有的字符都匹配结束,栈也为空,那么就表示匹配,否则就是左括号多
        if (stack.isEmpty()) {
            return true;
        }
        return false;
    }
    //判断是否为左括号
    public static boolean isLeftBracket(char c){
        if(c=='{'||c=='['||c=='('){
            return true;
        }
        return false;
    }
    //判断是否为右括号
    public static boolean isRightBracket(char c){
        if(c=='}'||c==']'||c==')'){
            return true;
        }
        return false;
    }
    //找出与右括号对应的左括号
    public static char resverse(char c){
        char res=' ';
        if(c=='}'){
            res= '{';
        }else if(c==']'){
            res= '[';
        }else if(c==')'){
            res= '(';
        }
        return res;
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值