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 ...