序列不包含任何匹配元素_C++ 栈的压入、弹出序列

76182c8ff717b54e747a5990705fbaf3.png

建一个辅助栈,模拟序列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; }};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值