具体题目要求很长,总结一下就是,给定入栈顺序来判断出栈顺序是否正确;
由于比较着急,当时总结到了规律是,元素x出栈后,在元素x之前入栈的元素,如果是在元素x之后出栈的,那么元素的相对顺序要反转过来(可以不连续)
举例说明;123入栈 那么 312出栈是不符合题意的;
但是这种思路是,大脑最快可以判断出栈顺序是否符合要求的方式,应用到代码上不太好实现;
最终做法:既然是栈,就模拟栈;
当栈顶元素不等于出栈的顶部元素的时候,入栈顺序继续执行,当栈顶元素和出栈序列的顶部元素相等时,元素开始出栈,同时,出栈序列顶部更新;
最终元素完成全部入栈和出栈序列对比的操作,如果栈为空(也可用出栈序列顶部最后指向的索引)则出栈序列正确;
function isRight(arrIn,arrOut){
let stack = [];
let i = 0;
for(const x of arrIn){
// 按照入栈顺序未元素入栈
stack.push(x);
// 栈顶元素尾与出栈序列元素相等,则为该元素的出栈位置
while(stack.length && stack[stack.length-1]==arrOut[i]){
stack.pop();
i++;
}
}
// 最后元素入栈后全部出栈,则说明出栈序列正确
if(stack.length){
return false;
}else{
return true;
}
}