import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 返回表达式的值
* @param s string字符串 待计算的表达式
* @return int整型
*/
public int solve (String s) {
String[] dateArr = s.split("");
Stack<String> dealStack = new Stack<>();
for (String s1 : dateArr) {
if (s1.equals(")")) {
String compute = "";
while (!dealStack.isEmpty()) {
String pop = dealStack.pop();
if (pop.equals("(")) {
Integer i = computeData(compute);
dealStack.push(i + "");
break;
} else {
compute = pop + compute;
}
}
} else {
dealStack.push(s1);
}
}
String res = "";
while (!dealStack.isEmpty()) {
res = dealStack.pop() + res;
}
return computeData(res);
}
public int computeData(String data) {
String[] split = data.split("");
List<Object> dataRes = new ArrayList<>();
int preI = 0;
String pre = "";
Integer prex = null;
for (int i = 0; i < split.length; i++) {
String s = split[i];
if (s.equals("*")) {
String add = data.substring(preI, i);
if (prex != null) {
prex = new Integer(add) * prex;
} else {
prex = new Integer(data.substring(preI, i));
}
preI = i + 1;
} else if (s.equals("-")) {
if (i==0) {
continue;
}
if (pre.equals("-") || pre.equals("+") || pre.equals("*")) {
preI = i;
} else {
String add = data.substring(preI, i);
if (prex != null) {
dataRes.add(new Integer(add) * prex);
prex = null;
} else {
dataRes.add(add);
}
dataRes.add("-");
preI = i + 1;
}
} else if (s.equals("+")) {
String add = data.substring(preI, i);
if (prex != null) {
dataRes.add(new Integer(add) * prex);
prex = null;
} else {
dataRes.add(add);
}
dataRes.add("+");
preI = i + 1;
}
if (i == split.length - 1) {
String add = data.substring(preI, i + 1);
if (prex != null) {
dataRes.add(prex * new Integer(add));
prex = null;
} else {
dataRes.add(add);
}
}
pre = s;
}
Integer ust = 0;
Iterator<Object> iterator = dataRes.iterator();
while (iterator.hasNext()) {
Object next = iterator.next();
if (next.equals("+")) {
ust = ust + new Integer(iterator.next() + "");
} else if (next.equals("-")) {
ust = ust - new Integer(iterator.next() + "");
} else {
ust = new Integer(next.toString());
}
}
return ust;
}
}