表达式括号匹配

 (1+(2+3)*(3+(8+0))+1-2)这是一个简单的数学表达式,今天不是计算它的值,而是比较它的括号匹配是否正确。
 前面这个式子可以简化为(()(()))这样的括号我们认为它是匹配正确的,
而((())这样的我们就说他是错误的。注意括号里面的表达式可能是错的,也可能有多个空格,对于这些我们是不用去管的,我们只关心括号是否使用正确。
 输入描述:给出一行表达式(长度不超过 100)。
 输出描述:如果匹配正确输出括号的对数,否则输出-1。

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        
        Deque<Character> stack = new ArrayDeque<>();
        int res = 0;
        //非法情况:)开始;栈内不为空
        for(int i = 0;i < s.length();i++){
            if(s.charAt(i) == '('){
                stack.push(')');
                res++;
            }else if(s.charAt(i) == ')'){
                if(stack.isEmpty()){
                    System.out.print("-1");
                    return;
                }
                stack.pop();
            }else{
                continue;
            }
        }
        System.out.print(stack.isEmpty() ? res : -1);
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容