(初學者寶典)有效括號

2021-10-24 12:52:11 字數 1717 閱讀 5354

2023年10月8號,今天是我寫演算法的第五天,不知道還能堅持多久,希望一起練習的小朋友能夠跟一起加油,一直堅持下去,今天的題目應該是小mi的面試題,希望大家能夠跟著我一起學習學習,看看這道的核心內容,來吧,讓我們看一眼這題目:

給定乙個只包括 『(』,』)』,』』,』[』,』]』 的字串,判斷字串是否有效。

有效字串需滿足:

左括號必須用相同型別的右括號閉合。

左括號必須以正確的順序閉合。

注意空字串可被認為是有效字串。

以上是這道的問題和主要想要執行的需求,本題利用了輔助棧,進行解覺,主要是利用棧的先進後出的原理,在進行入棧操作的時候,如果進入的是左括號( 的時候,如果下一進棧的是左括號,就繼續進棧,如果是右括號),把左括號(出棧操作,則遍歷完所有括號後 stack 仍然為空。建立雜湊表 dic 構建左右括號對應關係:keykey 左括號,valuevalue 右括號;這樣查詢 22 個括號是否對應只需 o(1)o(1) 時間複雜度;建立棧 stack,遍歷字串 s 並按照演算法流程一一判斷。

演算法流程

如果 c 是左括號,則入棧 pushpush;

否則通過雜湊表判斷括號對應關係,若 stack 棧頂出棧括號 stack.pop() 與當前遍歷括號 c 不對應,則提前返回 falsefalse。

提前返回 falsefalse

提前返回優點: 在迭代過程中,提前發現不符合的括號並且返回,提公升演算法效率。

解決邊界問題:

棧 stack 為空: 此時 stack.pop() 操作會報錯;因此,我們採用乙個取巧方法,給 stack 賦初值 ?? ,並在雜湊表 dic 中建立 key: 『?』,value:』?'key:′?

′,value:′?

′的對應關係予以配合。此時當 stack 為空且 c 為右括號時,可以正常提前返回 falsefalse;

字串 s 以左括號結尾: 此情況下可以正常遍歷完整個 s,但 stack 中遺留未出棧的左括號;因此,最後需返回 len(stack) == 1,以判斷是否是有效的括號組合。

class

solution()

:def

isvalid

(self,s)

:#定義函式,輸入乙個列表型別的資料

dic=',

'[':

']',

'?':

'?'}

#定義乙個字典也是就是雜湊表,方便查詢

stack=

['?'

]#把棧進行初始化方便進行遍歷

for i in s:

#進行迴圈,尋找列表中的元素

if i in dic:

#如在列表中就進入棧

#進入操作

elif dic[stack.pop()]

!=i:

#當不能在雜湊表匹配返回false

return

false

return

len(stack)==1

#如果棧的長度是1就說明還是初始的「?」,說明沒有元素返回true

t=solution()s=

['('

,')',''

]c=t.isvalid(s)

print

(c)

輸出結果:

d:\python\python.exe c:/users/asus/pycharmprojects/pythonproject1/選擇括號.py

true

初學者談初學者學html

這是乙個段落。解釋一下就是 html 與 html 之間的文字是描述網頁。head 與 head 之間的文字是文件的元資料。title 與 之間的文字是文件的標題。body 與 body 之間的文字是可見的頁面內容,是文章的主體部分。h1 與 h1 之間的文字被顯示為乙個大標題。p 與 p 之間的文...

初學者mysql MySQL初學者使用指南

有很多朋友雖然安裝好了mysql但卻不知如何使用它。在這篇文章中我們就從連線mysql 修改密碼 增加使用者等方面來學習一些mysql的常用命令。一 連線mysql。1 例1 連線到本機上的mysql。首先在開啟dos視窗,然後進入目錄 mysqlbin,再鍵入命令mysql uroot p,回車後...

初學者 遞迴

program xuexi3 implicit none integer,external fact 呼叫函式需要寫external 待定 integer n write n read n write fact n stop endrecursive integer function fact n ...