相信大多数读者在学习栈这个数据结构时,肯定接触过类似的题目:判断下面序列能通过push和pop得到?而今天这道题就是把我们平时做题时在纸上或者在大脑中推演的过程用代码实现,并判断
这里不一定要用栈来实现,这里可以用vector来实现一个简单的栈,通过vector的back()达到栈的top()的效果
想了解更多相关知识,可以自行访问查询
链接:cplusplus.com - The C++ Resources Network
vector模拟取反是因为,返回的是size(),如果为空,则size=0,0为false,非0为true,所以需要取反;empty()如果为空,则返回true,反之为false
class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped)
{
vector<int> num;
int i = 0, j = 0;
for (int i = 0; i < pushed.size(); i++)
{
num.push_back(pushed[i]);//模拟入栈
if (num.back() == popped[j])
{
while (num.size() && num.back() == popped[j])//模拟连续出栈
{
num.pop_back();
j++;
}
}
}
return !num.size();//如果符合,则栈为空,数量为0,否则栈不为空
}
};