強迫症老闆和他的洗碗工
題目內容:
洗碗工小明碰上了一位強迫症老闆老王,餐廳一共就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版》課程