点击打开链接
3 123 321 3 123 312
Yes. in in in out out out FINISH No. FINISH
题意:就是说给一个火车进站的序列,然后再给你一个火车出站的序列,而火车站最多能停n列火车,问是否能按所给的序列号让火车出站。
注:并不是非要让所有进站的火车全部进来才能出站,只是如果火车站进了多列火车,后进来的必须先出,这就是栈:后进先出
package stack; import java.util.Scanner; public class P1022 { static int n; public static void main(String[] args) { Scanner sc=new Scanner(System.in); char[] in,out; String s; String[] path; int count,j; while(sc.hasNext()){ n=sc.nextInt(); s=sc.next(); in=s.toCharArray(); s=sc.next(); out=s.toCharArray(); path=new String[n*2]; count=0;j=0; TrainStack trainStack=new TrainStack(n); for(int i=0;i<n;i++){ trainStack.inStack(in[i]); path[count++]="in";//存操作方式,是进还是出 while(!trainStack.isEmpty()&&j<n&&trainStack.getTop()==out[j]){//按要求序列出站 path[count++]="out"; trainStack.outStack(); j++; } } if(trainStack.isEmpty()){//若栈为空,则表示按要求序列将所有火车出站 System.out.println("Yes."); for(int i=0;i<count;i++){ System.out.println(path[i]); } }else{ System.out.println("No."); } System.out.println("FINISH"); } } } class TrainStack{ int top=0; char[] stack; public TrainStack(int n){ stack=new char[n]; } public char getTop() {//获得栈顶数据 return stack[top-1]; } public void inStack(char ch){//进栈 stack[top++]=ch; } public void outStack(){//出栈 if(isEmpty()){ return ; } top--; } public boolean isEmpty(){//判断栈是否为空 if(top==0){ return true; } return false; } }