DAY 005 符號成對判斷 棧的思想)

2022-05-04 12:18:09 字數 1987 閱讀 1128

005 題目如下:

給定乙個字串,裡邊可能包含「()」、"{}"、「」三種括號,請編寫程式檢查該字串的括號是否成對出現。

輸出:true:代表括號成對出現並且巢狀正確,或字串無括號字元。

false:未正確使用括號字元。

流程分析:

如果了解資料結構,那麼應該知道,簡單的採用乙個棧的特性,就能解決該問題,左括號棧頂字元必須和第乙個入棧的右括號字元匹配。

棧的特性:後進先出(lifo)

下面用一幅流程圖來說明程式執行步驟:

1、先定義乙個棧,把符號寫成乙個字典的形式,分別定義左符號、右符號

2、判斷字串中是否有左符號,如果有,加入棧列表

3、判斷字串中是否有右符號,如果有:

3.1、如果棧不為空,並且右符號是棧列表中最後乙個值得右符號,刪除棧列最後乙個值,用pop方法

3.2、不滿足情況,則返回false

4、返回 not 棧--也就是棧為空的話,返回為true,如果棧列表為空,返回false  (將剩餘的有值的棧列錯誤排除掉)

**分析:

brankets=

":"brankets_left=brankets.values()

brankets_right=brankets.keys()

defbranket_check(str):

stack=

for char in

str:

if char in

brankets_left:

if char in

brankets_right:

if stack and stack[-1]==brankets[char]:

stack.pop()

else

:

return

false

return

notstack

defmain():

s=input("

輸入您要查詢的字串:")

ifbranket_check(s):

print("

\033[32m符號是成對出現的\033[0m")

else

:

print("

\033[31m符號不是成對出現的!\033[0m")

if__name__ == '

__main__':

main()

題目反思:

1、bug總結:

list=[1,2,3]

print(list.pop([-1]))

typeerror:

'list

' object cannot be interpreted as an integer

bug原因:

bug1:刪除列表最後乙個值,我寫了stack.pop([-1]),程式一直報錯

bug2:並沒有考慮到會有stack還有一些沒有刪除的左符號的情況,所以得到結果和實際結果不一致

bug解決:

bug1:stack.pop() 直接就是刪除列表中最後乙個值,或者寫成:stack.pop(-1),這樣表示式:stack.pop([-1]) 是錯誤的

bug2:最後的程式返回值不應該是return true/false,而應該是 return not stack

新學知識點:

1、第一次了解到棧列的思想,棧:後進先出,並且只允許棧頂操作,不允許棧底操作

2、學會如何判斷看符號是不是成對出現,對以後成雙成對出現的某些字串的判斷操作會有一些思路

mark on 2018.04.07

005day 存在重複元素

存在重複元素 給定乙個整數陣列,判斷是否存在重複元素。如果任意一值在陣列 現至少兩次,函式返回 true 如果陣列中每個元素都不相同,則返回 false 解法超時 class solution def containsduplicate self,nums list int bool if len ...

day 005 Linux之使用者許可權相關命令

一 chmod 簡單使用 chmod 可以修改使用者 組對檔案 目錄的許可權.命令格式 chmod rwx 檔名 目錄名 二 組管理終端命令 通過sudo執行 groupadd 組名 新增組 groupdel 組名 刪除組 cat etc group 確認組資訊 chgrp r 組名 檔案 目錄名 ...

16day 重定向符號

1 標準輸出重定向符號 2 錯誤輸出重定向符號 1 標準輸出追加重定向符號 2 錯誤輸出追加重定向符號 如何將正確資訊和錯誤資訊都輸出到檔案中 日誌檔案 root oldboyedu oldboy cho oldboy oldboy ok.txt 2 oldboy error.txt root ol...