【解题思路】
依次查找poped数组中的每个值,能不能被栈合法地弹出。有两种方式:第一种,当前入栈的栈顶元素是我们要查找的值,那么弹出栈顶元素;第二种,在未入栈的元素中找到我们要找的值,那么把未入栈的该元素和它之前的元素压入栈,并弹出栈顶元素。如果这两种方式都找不到我们要查找的值,说明不存在一种入栈方式获得该poped序列。
class Solution {
public boolean validateStackSequences(int[] pushed, int[] popped) {
int i = -1, j = 0, k = 0;
int len = pushed.length;
int[] stack = new int[len];
while(k < len)
{
boolean flag1 = false, flag2 = false;
if(i >= 0 && stack[i] == popped[k])
{
flag1 = true;
i--;
}
else{
int num = -1;
for(int r = j; r < len; r++)
{
if(pushed[r] == popped[k])
{
flag2 = true;
num = r;
}
}
if(flag2)
{
for(int r = j; r < num; r++)
{
stack[++i] = pushed[r];
}
j = num + 1;
}
}
if(!flag1 && !flag2)
{
return false;
}
k++;
}
return true;
}
}