算法:补齐左括号

例如
输入:1+1)*3+4)/5)
输出:(1+1)*((3+4)/5)

public String convert(String param){
      Stack<String> leftStack = new Stack<>();
      Stack<String> rightStack = new Stack<>();
      char[] chars = param.toCharArray();
      for (int i = 0; i < chars.length; i++) {
          char c = chars[i];
          //操作符入右栈
          if(c == '+' || c=='-'||c=='*' ||c=='/'){
              rightStack.add(String.valueOf(c));
          }
          //遇到右括号,要把左栈的2个操作数pop出,连接右栈操作符,然后补齐左右括号
          else if(c == ')'){
              String left2 = leftStack.pop();
              String left1 = leftStack.pop();
              leftStack.add("("+left1+rightStack.pop()+left2+")");
          }
          //其余的是操作数,要注意2位数及以上的,要拼起来
          else{
              String num = c+"";
              while((i+1)<chars.length
              &&Character.isDigit(chars[i+1])) {
                  num += c;
                  i++;
              }
              leftStack.add(num);
          }
      }
      //正常来说,遍历结束后,右栈都会留有一个操作符
      while(rightStack.size()>0){
          String left2 = leftStack.pop();
          String left1 = leftStack.pop();
          leftStack.add(left1+rightStack.pop()+left2);
      }
      //这里记得要按顺序pop出来,栈中越靠栈顶的,排位越往右
      String result = "";
      while(leftStack.size()>0){
          result = leftStack.pop()+result;
      }
      return result;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值