题目描述
对一个空栈进行 push 和 pop 操作各 n 次,使得 1-n 每个数都被 push 和 pop 一次,n 次 push 的数按照顺序形成排列 A,n 次 pop 的数按照顺序形成排列 B,此时称 A 和 B 互为“栈转化序列”。
input
6
1 2 3 4 5 6
5 6 4 3 2 1
output
True
explanation
push(1),push(2),push(3),push(4), push(5),pop(5), push(6),pop(6), pop(4),pop(3),pop(2),pop(1)
解题思路
因进栈和出栈的方式千变万化,若实现每一种情况,再与第二个序列进行比较不太现实。因此需要找到栈转化序列的规律。
比如以i
元素为基准,若j
元素比i
元素后进栈,那么j
元素可出现在i
元素后面的任意一个位置。若j
元素比i
先进栈,那么需要看看j
元素后是否有比j
元素后进栈的元素,若有,则该序列不是一个栈转化序列。
例:
6
a b c