/**
* 0.构造两个Stack vals和ops 分别存放数值和操作符
* 1.遍历输入字符串
* 2.如果是数值push到vals
* 3.如果是操作符push到ops
* 4.如果是右括号: 拼接 "("+vals.pop()+ops.pop()+vals.pop()+")",然后把整个结果push到vals
* 5.循环2/3/4步骤直到遍历结束
* 6.vals.pop()即最后结果
*
*/
public class InfixAddLeftBracket {
private static final String LEFT_PAREN = "(";
private static final String RIGHT_PAREN = ")";
public static String addLeftBracket(String input) {
Stack<String> ops = new Stack<>();
Stack<String> vals = new Stack<>();
String val = "";//拼接数值
for (String s : input.trim().split("")) {
if(s.equals(RIGHT_PAREN)){
if(!val.equals("")){
vals.push(val);
val = "";
}
String val1 = vals.pop();
String val2 = vals.pop();
String result = LEFT_PAREN + val2 + ops.pop() + val1 + RIGHT_PAREN;
vals.push(result);
}else if(s.equals("+")||s.equals("-")||s.equals("*")||s.equals("/")){
if(!val.equals("")){
vals.push(val);
val = "";
}
ops.push(s);
}else{
val += s;
}
}
return vals.pop();
}
public static void main(String[] args) {
String str1 = "1+2)*3-4)*5-6)))";
String str2 = "11+2.1)*3-4)*5-6)))";
System.out.println(addLeftBracket(str1));
System.out.println(addLeftBracket(str2));
}
}