题目要求如下:
若入栈元素属于任意符号集合S,入栈序列是S中集合元素的一个排列C。试设计算法,判定S的另一个不同于C的排列,是否可能是一个对应于S的出栈序列。
实现思路:
构造一个辅助栈,在一系列操作结束后,如果该辅助栈非空,则不是有效序列。
代码:
#include"pch.h"
#include<iostream>
#include<stack>
#include<vector>
using namespace std;
bool isPopTrue(vector<int> pushV, vector<int> popV)
{
if (pushV.size() != popV.size())
return false;
stack<int> st;
int j = 0;
for (int i = 0; i < pushV.size(); i++)
{
st.push(pushV[i]);
while (!st.empty() && popV[j] == st.top())
{
st.pop();
j++;
}
}
return st.empty();
}
int main()
{
int pushV[] = { 1,2,3,4,5 };
int popV[] = { 4,5,3,1,2 };
vector<int> v1(pushV, pushV + 5);
vector<int> v2(popV, popV + 5);
if (isPopTrue(v1, v2))
{
cout << "The pop set is valid\n";
}
else
{
cout << "The pop set is not valid\n";
}
}
显然测试序列不是有效的。