题目描述:
中缀表达式转后缀表达式_牛客网
将中缀表达式转为后缀表达式,输入 a+bc/d-a+f/b 输出 abcd/+a-fb/+
要求:语言不限;输入输出均为单个字符串;操作数用单个小写字母表示,操作符只需支持 +-*/,按照四则运算顺序确定优先级,不包含括号。
输入描述:
一个字符串为合法的中缀表达式
字符串长度不超过200000
输出描述:
对应的后缀表达式
输入示例:
a+b*c/d-a+f/b
输出示例:
abc*d/+a-fb/+
题目分析:
这道题呢,中缀表达式转后缀表达式,从左到右依次遍历字符串,当遇到操作数时直接输出;当遇到操作符时,如果当前操作符优先级小于等于栈顶优先级,则将栈顶操作符出栈,然后再将当前操作符压栈。当遍历完字符串后如果栈不为空,则将栈中元素依次出栈。具体代码如下~
代码实现:
import java.util.Scanner;
import java.util.HashMap;
import java.util.Stack;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
HashMap<String,Integer> map=new HashMap();
map.put("+",0);
map.put("-",0);
map.put("*",1);
map.put("/",1);
StringBuffer sb=new StringBuffer();
Stack<String> stack=new Stack();
for(int i=0;i<str.length();i++){
char c=str.charAt(i);
if('a'<=c&&c<='z'){
sb.append(c);
}else{
while(!stack.isEmpty()&&
map.get(String.valueOf(c))<=map.get(String.valueOf(stack.peek()))){
sb.append(stack.pop());
}
stack.push(String.valueOf(c));
}
}
while(!stack.isEmpty()){
sb.append(stack.pop());
}
System.out.println(sb.toString());
}
}