題目內容:
給定乙個只包括 『(』,』)』,』』,』[』,』]』 的字串,判斷字串是否有效。
有效字串需滿足:
左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。
輸入格式:
一行字串
輸出格式:
true或false,表示該輸入是否為合法括號串
輸入樣例:
輸出樣例:
true
遍歷字串,遇到左括號時入棧,遇到與之匹配的右括號時,之前的左括號出棧,遍歷完成後若棧為空則表示括號匹配成功,否則匹配失敗。
def
perchecker
(s):
stack =
# 用列表模擬棧
for i in s:
if i in
'(]'
return opens.index(
open
)== closers.index(close)
print
(perchecker(
input()
))
題目內容:
開心消消樂我們都熟悉,我們可以用剛學過的棧來做乙個「一維」的開心消消樂遊戲,這個遊戲輸入一串字元,逐個消去相鄰的相同字元對。
如果字元全部被消完,則輸出不帶引號的「none」
輸入格式:
乙個字串,可能帶有相鄰的相同字元,如「aabbbc」
輸出格式:
乙個字串,消去了相鄰的成對字元,如「bc」
輸入樣例:
beepoo***yz
輸出樣例:
bpxyz
遍歷字串,先將第乙個字元入棧,之後的字元判斷與前乙個字元是否一致,若一致則將之前的字元出棧,若不一致則入棧,最後將棧內的字元連線後返回。
def
eliminate
(s):
stack =
for i in s:
iflen
(stack)==0
:elif i == stack[-1
]:stack.pop(
)else
:return stack
print(''
.join(eliminate(
input()
)))
題目內容:
洗碗工小明碰上了一位強迫症老闆老王,餐廳一共就10只盤子,老闆給仔細編上了0~9等10個號碼,並要求小明按照從0到9的編號來洗盤子,當然,每洗好乙隻盤子,就必須得整齊疊放起來。
小明洗盤子期間,經常就有顧客來取盤子,當然每位顧客只能從盤子堆最上面取1只盤子離開。
老王在收銀台仔細地記錄了顧客依次取到盤子的編號,比如「1043257689」,這樣他就能判斷小明是不是遵照命令按照0123456789的次序來洗盤子了。
你也能像老王一樣作出準確的判斷嗎?
輸入格式:
長度為10的字串,其中只包含0~9的數字,且不重複,代表顧客依次取到的盤子編號
輸出格式:
字串:yes或者no,表示遵照次序洗盤子,或者沒有遵照次序洗盤子
輸入樣例:
輸出樣例:
yes如果盤子按順序洗,當你往前取編號小的盤子時,編號大1的盤子肯定已經被取走了,例如先取走4、5,之後取走3,此時4肯定已經被取走了
def
washdishes
(s):
stack =
for i in s:
iflen
(stack)==0
:elif i < stack[-1
]:# 判斷是否往前取編號小的盤子
ifnot i +
1in stack:
# 判斷編號大1的盤子是否已經被取走
return
'no'
else
:else
:return
'yes'
dish_index =
for i in
input()
:print
(washdishes(
list
(map
(int
, dish_index)))
)
Python資料結構與演算法分析(第2版)閱讀筆記
正文提取碼 fjlk 中序表示式,前序表示式,後續表示式 使用棧這種資料結構來儲存 a b c a 存入列表末端 入棧 b 存入列表末尾 入棧之前,判斷棧裡是否有高於或等於其優先順序的運算子,若有,將其彈出並存到列表末尾,把 存到列表末尾,號入棧 b 存入列表尾部帶括號的情況 a b c d e f...
資料結構與演算法 遞迴演算法(Python版)
一 整數轉換為任意進製 我們用最熟悉的十進位制分析下這個問題 十進位制有十個不同符號 convstring 0123456789 比十小的整數 轉換成十進位制,直接查表 就可以 了 convstring n 想辦法把比十大的整數,拆成一系列比十小的整 數,逐個查表,比如七百六十九,拆成 七 六 九,...
MOOC資料結構與演算法Python版 第六周測驗
1 單選 2分 下列哪個演算法使用到了分治策略?d 2單選 2分 函式值快取最適合使用哪種python中的資料型別?b 3 單選 2分 已知數列g x 滿足 根據遞推式寫出求數列值的遞迴演算法,問原始演算法與採用函式值快取的演算法時間複雜度分別為多少?a 4 單選 2分 博物館大盜問題中,若共有10...