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]bug原因:print(list.pop([-1]))
typeerror:
'list
' object cannot be interpreted as an integer
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...