作者: 乔一波一 | 来源:发表于2023-08-21 17:36 被阅读0次

    出栈合法性

    • 题目:已知自然数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')
    

    相关文章

      网友评论

          本文标题:

          本文链接:https://www.haomeiwen.com/subject/ahkymdtx.html