出栈合法性
- 题目:已知自然数1,2,...,N(1<=N<=100)依次入栈,请问序列C1,C2,...,CN是否为合法的出栈序列。
- 输入:输入包含多组测试数据。每组测试数据的第一行为整数N(1<=N<=100),当N=0时,输入结束。
第二行为N个正整数,以空格隔开,为出栈序列。 - 输出: 对于每组输入,输出结果为一行字符串。如给出的序列是合法的出栈序列,则输出Yes,否则输出No。
- 样例输入:
5
3 4 2 1 5
5
3 5 1 4 2
0
解题思路:
模拟入栈出栈的过程,当入栈的元素等于当前出栈次序的元素时,停止入栈,弹出栈顶元素,和当前出栈次序的元素比较值。如果值相等,则继续模拟入栈出栈,否则表示当前出栈顺序是不合理的。
# ACM模式
while True:
n = int(input())
if n == 0:
break
sequence = list(map(int, input().split()))
stack = []
current = 1
possible = True
# 模拟当前序列的进栈顺序
for num in sequence:
# 遇到当前序列的出栈元素
while current <= num:
stack.append(current)
current += 1
# 当前进栈顺序是否能匹配出栈shun
if stack[-1] == num:
stack.pop()
else:
possible = False
break
if possible:
print('Yes')
else:
print('No')
网友评论