Python数据结构:强迫症老板和他的洗碗工

强迫症老板和他的洗碗工

题目内容:

洗碗工小明碰上了一位强迫症老板老王,餐厅一共就10只盘子,老板给仔细编上了0~9等10个号码,并要求小明按照从0到9的编号来洗盘子,当然,每洗好一只盘子,就必须得整齐叠放起来。
小明洗盘子期间,经常就有顾客来取盘子,当然每位顾客只能从盘子堆最上面取1只盘子离开。
老王在收银台仔细地记录了顾客依次取到盘子的编号,比如“1043257689”,这样他就能判断小明是不是遵照命令按照0123456789的次序来洗盘子了。
你也能像老王一样作出准确的判断吗?

输入格式:

长度为10的字符串,其中只包含0~9的数字,且不重复,代表顾客依次取到的盘子编号

输出格式:

字符串:Yes或者No,表示遵照次序洗盘子,或者没有遵照次序洗盘子

输入样例1:1043257689
输出样例1:Yes

输入样例2:4230178956
输入样例2:No

class stackDT:
    def __init__(self):
        self.items = []
    def isempty(self):
        return self.items == []
    def push(self, item):
        self.items.append(item)    
    def pop(self):
        return self.items.pop()  
    def peek(self):
        return self.items[-1]
    def size(self):
        return len(self.items)
def pushstack(roomstr1, roomstr2):
    while not roomstr1.isempty():
        a = roomstr1.pop()
        roomstr2.push(a)
    return roomstr2

def change(roomstr1, roomstr2):
    roomstr3 = stackDT()
    roomstr3 = pushstack(roomstr1, roomstr3)
    roomstr1 = pushstack(roomstr3, roomstr2)
    return roomstr1

def main():
    checkstr = list(input())
    roomstr1 = stackDT()
    roomstr2 = stackDT()
    roomstr1.push(eval(checkstr[0]))   
    for i in checkstr[1:]:
        j = eval(i)
        if roomstr2.isempty():         
            if roomstr1.peek() > j:
                roomstr1.push(j)
            else:
                roomstr2.push(j)
        else:                         
            if roomstr2.peek() < j:     
                roomstr1 = change(roomstr1,roomstr2)
                roomstr2 = stackDT()
            roomstr2.push(j)           
        
    if not roomstr2.isempty():         
        roomstr1 = change(roomstr1,roomstr2)
    if roomstr1.items == [9,8,7,6,5,4,3,2,1,0]:
        print('Yes')
    else:
        print('No')

main()

题目来源:中国大学MOOC(慕课)北大陈斌老师的《数据结构与算法Python版》课程

发布了69 篇原创文章 · 获赞 59 · 访问量 8957

猜你喜欢

转载自blog.csdn.net/weixin_43412569/article/details/105090986