18,输入两个序列一个代表入栈顺序,验证另一个是否是出栈序列 《剑指offer》...
时间: 2024-03-13 10:45:25 浏览: 77
好的,这是一道经典的栈的应用题目。我们可以使用一个辅助栈,将输入的入栈序列一个一个入栈,并且每次入栈后判断是否需要进行出栈操作。如果需要出栈,就将辅助栈的栈顶元素出栈,并且将出栈序列的指针向后移动一位。最后,如果辅助栈为空,说明出栈序列是合法的。
具体的实现可以参考下面的 Python 代码:
```python
def is_pop_order(push_seq, pop_seq):
stack = []
pop_index = 0
for num in push_seq:
stack.append(num)
while stack and stack[-1] == pop_seq[pop_index]:
stack.pop()
pop_index += 1
return not stack
```
以上代码中,`push_seq` 表示入栈序列,`pop_seq` 表示出栈序列。我们使用一个 while 循环,不断判断入栈序列中的元素是否可以出栈。如果可以出栈,就将辅助栈的栈顶元素出栈,并且将出栈序列的指针向后移动一位。最后,如果辅助栈为空,说明出栈序列是合法的。
下面是一个示例:
```python
push_seq = [1,2,3,4,5]
pop_seq1 = [4,5,3,2,1]
pop_seq2 = [4,3,5,1,2]
print(is_pop_order(push_seq, pop_seq1)) # True
print(is_pop_order(push_seq, pop_seq2)) # False
```
第一个出栈序列是合法的,第二个出栈序列是不合法的。
阅读全文