classSolution{publicintcalculate(String s){if(s.trim().startsWith("-")) s ="0"+ s;Stack<Integer> numStack =newStack<>();Stack<Character> opStack =newStack<>();int cur =0;boolean pending =false;for(char c : s.toCharArray()){if(c ==' '){// pass}elseif(c =='('){if(pending){numStack.push(cur);cur =0;pending =false;}opStack.push(c);}elseif(c ==')'){if(pending){numStack.push(cur);cur =0;pending =false;}char op = opStack.pop();while(op !='('){int b = numStack.pop();int a = numStack.pop();numStack.push(cal(a, b, op));op = opStack.pop();}}elseif(c >='0'&& c <='9'){cur *=10;cur += c -'0';pending =true;}else{if(pending){numStack.push(cur);cur =0;pending =false;}if(!opStack.isEmpty()&& opStack.peek()!='('){char op = opStack.pop();int b = numStack.pop();int a = numStack.pop();numStack.push(cal(a, b, op));}opStack.push(c);}}if(pending){numStack.push(cur);}if(!opStack.isEmpty()){char op = opStack.pop();int b = numStack.pop();int a = numStack.pop();numStack.push(cal(a, b, op));}return numStack.pop();}publicintcal(int a,int b,char op){return op =='+'? a + b : a - b;}}