本篇博客主要讲解怎样判断元素出栈、 入栈顺序的合法性
邮箱:blbagony@163.com
欢迎提出问问题
问题描述
给定入栈顺序,判断出栈顺序是否合法
解题思路
模拟出栈顺序,将出栈划分为几次,原来栈只要入栈一次就打破了连续出栈的顺序,让现在对比栈匹配出栈元素如果匹配到,就判断出栈顺序(需要判断的出栈顺序)和当前对比栈顺序是否相同, 如果相同清理对比栈元素,后面存放下一次连续的 pop。每一次清理都会将当前对比栈一次清空,如果没有则表明出栈顺序有问题。
详细步骤
代码
bool StackPopOderIsLegal(char* in, char* out)
{
assert(in && out && strlen(in) == strlen(out));
std::stack<char> tamp;
for (; *in != '\0'; in++){
tamp.push(*in);
while (!tamp.empty() && *out == tamp.top())
{
out++;
tamp.pop();
}
}
return tamp.empty() ? true : false;
}