题目:输入两个整数序列,第一个序列表示栈的压入操作,第二个序列表示栈的弹出顺序,假设所有数字不相等,请判断是否合法。
- 解析:如果弹出的数字和栈顶元素相等,则弹栈,如果弹出的数字和栈顶不相等,则压栈,如果最终所有的元素都被压栈。最终栈不为空,则不合法。
import java.util.Stack;
public class isPopSolution {
public boolean IsPopOrder(int[] push,int[] pop){
if(push.length==0||pop.length==0||push.length!=pop.length) return false;
int length = pop.length;
int popIndex = 0;
int pushIndex = 0;
Stack<Integer> stack = new Stack<>();
while(length>pushIndex){
while(stack.isEmpty()||stack.top!=pop[popIndex]){
if(pushIndex==length)
break;
stack.push(pushIndex);
pushIndex++;
}
if(stack.top!=pop[popIndex]) break;;
stack.pop();
popIndex++;
}
if(length==popIndex&&stack.isEmpty()) return true;
return false;
}
}