Ваш код O(n)
во временной сложности, которая, я думаю, является самой быстрой из возможных для этой проблемы. Но вы не пользуетесь StringBuilder
, но используете трудоемкую конкатенацию строк.
Вот оптимизированная версия:
public static void main(String[] args) throws IOException {
BufferedReader bi = new BufferedReader(new InputStreamReader(System.in));
String line = bi.readLine();
String[] input = line.split(" ");
StringBuilder builder = new StringBuilder();
Stack<String> stack = new Stack<String>();
for(String e:input) {
switch(e) {
case("+"):
case("-"):
case("*"):
case("/"):
String i = stack.pop();
String k = stack.pop();
builder.setLength(0);
builder.append("(");
builder.append(k).append(e).append(i);
builder.append(")");
stack.push(builder.toString());
break;
default:
stack.push(e);
}
}
System.out.println(stack.pop());
}