建一个辅助栈,模拟序列1按序列2顺序的出栈,如1,2,3,4,5和4,5,3,2,1
序列1为空时,首先压入1,序列2的首元素4,不等于当前栈顶,继续压入2,依然不等,继续压入3.........压入4,当前栈顶元素等于序列2的首元素4,此时将4弹出,序列2元素索引加1,此时指向5。
此时栈顶元素为3,不等于5,继续压入序列1的5元素,此时相等,则将栈顶元素5弹出,序列2的索引加1,此时指向3。
此时栈顶元素为3,二者相等,则弹出栈顶元素,序列2索引加1,指向2。
此时栈顶元素为2,与序列2指向元素相等,继续上述操作,直至序列2指向最后一个元素,并且栈中元素全部匹配弹出。此时可判断序列2是序列1的弹出序列。
代码如下:
class Solution {public: bool IsPopOrder(vector pushV,vector popV) { int len1=pushV.size(); stack s1; int i=0; int j=0; while(jlen1-1) //序列1中元素全部压入时,则停止 break; s1.push(pushV[i]); i++; } if(s1.top()!=popV[j])//按照栈的特性,如果上面的子循环结束时栈顶元素和序列2指向的元素 //不等,则表示序列2不是序列1的弹出序列,直接break。 break; s1.pop(); j++; } if(s1.empty()) return true; else return false; }};