import java.util.*;
import java.lang.Integer;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 返回表达式的值
     * @param s string字符串 待计算的表达式
     * @return int整型
     */
       public static int solve(String s) {
        // write code here
        //如果有括号 则借助栈先处理括号 没有括号直接运算
        if (s.length() == 0) {
            return 0;
        }
        if (s.length() == 1) {
            return Integer.valueOf(s);
        }
        if (s.contains("(")) {
            Stack<String> stack = new Stack<>();
            //所有字符均入栈 遇到右括号要停下来计算
            for (int i = 0; i < s.length(); i++) {
                char next = s.charAt(i);
                if (next == ')') {
                    //计算当前()中的值并把结果压到栈里
                    int value = calculate(stack);
                    stack.push(value + "");
                } else {
                    stack.push(String.valueOf(next));
                }

            }
            //循环完后 所有的括号都处理掉了
            String temp = "";
            while (!stack.isEmpty()) {
                temp = stack.pop() + temp;
            }
            if (temp.equals("")) {
                return 0;
            } else {
                return calculateWithStr(temp);
            }
        } else {
            return calculateWithStr(s);
        }
    }

    private static int calculate(Stack<String> stack) {
        StringBuilder sb = new StringBuilder();
        while (!stack.peek().equals("(")) {
            sb.insert(0, stack.pop());
        }
        //把左括号弹出来
        stack.pop();
        String curS = sb.toString();
        //计算这个没有括号的串的值
        int value = calculateWithStr(curS);
        return value;
    }

    private static int calculateWithStr(String str) {
        str = str.replace("+-", "-");
        str = str.replace("--", "+");
        str = str.replace("*-", "&");
        String[] s1 = str.split("\\+");
        int res = 0;
        for (int i = 0; i < s1.length; i++) {
            String next = s1[i];
            if (next.contains("-")) {
                //处理减法逻辑
                res += calculateSubtract(next);
            } else {
                if (next.contains("*") || next.contains("&")) {
                    res += calculateX(next);
                } else {
                    res += Integer.valueOf(next);
                }
            }
        }
        return res;
    }

    /**
     * 负号和减号是一样的要处理
     * 这个方法里面只有 减法和乘法注意 -1 、-1*2的情况
     */
    private static int calculateSubtract(String str) {
        String[] s1 = str.split("-");
        //处理  -1、-1*2这种情况-1*2 = 0-1*2
        int res = 0;
        if (!s1[0].equals("")) {
            //第一个数可能是个单纯的数字 也可能是个乘法表达式
            if (s1[0].contains("*") || s1[0].contains("&")) {
                res = calculateX(s1[0]);
            } else {
                res = Integer.valueOf(s1[0]);
            }
        }

        for (int i = 1; i < s1.length; i++) {
            String next = s1[i];
            if (next.contains("*") || next.contains("&")) {
                res -= calculateX(next);
            } else {
                res -= Integer.valueOf(next);
            }
        }
        return res;
    }

    private static int calculateX(String s) {
        s = s.replace("&","*-");
        String[] s2 = s.split("\\*");
        int tempX = Integer.valueOf(s2[0]);
        for (int j = 1; j < s2.length; j++) {
            tempX = tempX * Integer.valueOf(s2[j]);
        }
        return tempX;
    }
}