给定两个序列A,B,判断按照A的入栈顺序能否得到B的出栈顺序
思路比较明确,创建一个栈,当栈为空,或者栈顶元素不是B的目前序列元素(这部分可以用数组或者列表保存),那么就按照A的序列顺序压入下一个数,如果是的话就将这个数出栈。如果A的所有元素已经入栈,但是B的元素还有没有入栈的,那么说明不符合。
代码需要注意边界条件:
public class twenty {
public static void main(String args[]){
Stack<Integer>s=new Stack<Integer>();
List<Integer>list=new ArrayList<Integer>();//保存A序列
List<Integer>list2=new ArrayList<Integer>();//保存B序列
Scanner cin=new Scanner(System.in);
while(true){
int m=cin.nextInt();//以0停止
if (m==0) break;
list.add(m);
}
while(true){
int m=cin.nextInt();
if (m==0) break;
list2.add(m);
}
cin.close();
int i=0;//控制第一个栈压入
int j=0;//控制第二个栈压入
while(i<=list.size()&&j<list.size()){
if (s.isEmpty()||s.peek()!=list2.get(j)){//如果栈为空,或者栈顶元素不是等待元素
int m=list2.get(j);
while(i<list.size()&&list.get(i)!=m){
s.push(list.get(i));
i++;
}
if (i==list.size())//栈顶元素不是等待元素,并且前一个已经遍历结束,说明不符合
break;
else
i++;//跳过符合的这个元素
}else{//栈顶元素就是等待元素
s.pop();
}
j++;//待压入元素往后面去一个
}
if (i==list.size()&&j==list.size())
System.out.println("符合");
else
System.out.println("不符合");
}
}