本文主要是介绍栈 入栈序列与出栈序列 合法性 的一个有趣问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
4.输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。 假设压入栈的所有数字均不想等。例如: 序列 1 2 3 4 5 是某栈的压栈序列, 序列 4 5 3 2 1是该压栈序列对应的一个弹出序列, 但 4 3 5 1 2就不可能是该压栈序列的弹出序列。
思路: 首先我们来 理解下题意, 有些人可能会这么想, 1 2 3 4 5为压栈序列, 弹出序列一定是 5 4 3 2 1 啊
4 5 3 2 1 一定不是它的一个弹出序列。 并不是这样的 , 我们来分析 , 如果我们 压入 123 Pop 一次 再压入 4 5
此时全部Pop 则, 压入序列为 1 2 3 4 5 弹出序列为 3 5 4 2 1
理清了题意, 我们此时进行分析. 先给一串 简单 入栈出栈序列
入栈: 1 2 3 4 5
出栈: 3 5 4 2 1
我们首先来看弹出序列, 弹出序列的第一个元素为3, 则弹出3时,3必须在栈顶。 入栈 -->1 -->2 -->3, 直到要弹出元素与栈顶元素相等(此时为3), 弹出。
接下来要弹出元素为 5, 和栈顶元素(2)不相等, 即继续入栈, 直到遇到元素 5. 入栈 -->4 -->5. 弹出5。 接下来, 栈顶元素为4 , 要弹出元素为4, 弹出。
重复上述过程, 最后,如果入栈序列已经为空, 但 栈顶 依旧和 弹出序列元素 不相等, 则他们不匹配。 如果 两者都 为空, 则它们匹配。
题目条件: 所有数字均不相等
这篇关于栈 入栈序列与出栈序列 合法性 的一个有趣问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!