不通过
您的代码已保存
运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。点击对比用例标准输出与你的输出
case通过率为93.33% import java.util.*;
public class Main
{
public static void main(String [] args)
{
Scanner sc=new Scanner(System.in);
while(sc.hasNext())
{
String str=sc.next();
int index=0;
Stack operStack=new Stack<>();//符号栈
List list=new LinkedList<>();//一开始是存放数的集合,到后来也会存放符号
while(index
{
String s=""+str.charAt(index);
//如果扫描到的是符号
if(s.matches("[^a-z]"))
{
while(true)
{
//如果符号栈为空
if(operStack.empty())
{
operStack.push(s);//直接进入符号栈
break;
}
else if(getPriority(s)>getPriority(operStack.peek()))//如果运算符优先级比栈顶元素优先级高
{
operStack.push(s);
break; }
else//否则将栈顶元素弹出来,放到list集合中
{
list.add(operStack.pop());
//再次与新的栈顶元素进行比较运算符优先级
}
}
}
else if(s.matches("[a-z]"))//如果扫描到的是数
{
String builder="";
while(index
{
builder+=(""+str.charAt(index));
index++;
}
list.add(builder);
builder="";
index-=1;
}
index++;
}
while(!operStack.empty())
{
list.add(operStack.pop());
}
for(String item:list)
{
System.out.print(item);
}
}
}
private static int getPriority(String oper)//获取运算符的优先级
{
if(oper.equals("+")||oper.equals("-"))
{
return 1;
}
else if(oper.equals("*")||oper.equals("/"))
{
return 2;
}
else
{
System.out.println("非法运算符!");
return 0;
}
}
}