1 问题
输入两个整数序列,其中一个序列表示站的push(入栈)顺序,判读另一个序列有没有可能是对应的pop(出站)顺序。
2 思路分析
1) 把push序列依次入栈,直到栈顶元素等于pop序列的第一个元素,然后栈顶元素出站,pop序列的移动到第二个元素。
2)在1)后,如果栈顶元素还等于pop序列现在的元素,则继续执行第一步里面的不走,出栈同时pop后移;否则push序列继续 入栈,同时和pop序列继续和比较。
3) 当push序列已经全部入栈,但是pop序列还没有完全遍历,而且栈顶元素不等于当前的pop元素,那么这就不可能是一个出栈序列。如果栈空,并且pop序列也已经被完全遍历,则说民这可能是一个出栈的序列。
3 代码实现
package Stack;
import java.util.Stack;
public class Stackdemo {
public static boolean isPopSerial(String push,String pop){
if (push==null||pop==null){
return false;
}
int pushlen=push.length();
int poplen=pop.length();
if (pushlen!=poplen){
return false;
}
int pushindex=0;
int popindex=0;
Stack<Character> stack=new Stack<>();
while (pushindex<pushlen){
//把push序列依次加入栈中,直到栈顶元素等于pop序列的第一个元素
stack.push(push.charAt(pushindex));
pushindex++;
//当栈顶元素栈顶元素等于pop序列的第一个元素
while (!stack.empty() && stack.peek()==pop.charAt(popindex)){
stack.pop();
popindex++;
}
}
//栈为空,并且pop中的元素被遍历完
return stack.empty()&&popindex==poplen;
}
public static void main(String[] args) {
String pu="12345";
String po="53412";
if (isPopSerial(pu,po)){
System.out.println("是一个");
}else {
System.out.println("不是一个");
}
}
}