


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;
	}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
hdu1022(Train Problem I)----- 典型栈类题目
原文:http://blog.csdn.net/u011479875/article/details/47384301