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版》課程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章