匹配左括號或者右括號js 演算法題解之最長有效括號

2021-10-18 04:38:33 字數 857 閱讀 5123

給定乙個只包含 '(' 和 ')' 的字串,找出最長的包含有效括號的子串的長度。

輸入:"(()"輸出:2解釋:最長有效括號子串為"()"
輸入:")()())"輸出:4解釋:最長有效括號子串為"()()"
這題其實大家都能想到要麼用動態規劃,要麼就用棧來解題,這裡講一講用棧來解題的思路

我們可以將棧底元素儲存為已經遍歷過的元素中沒有匹配右括號的下標,主要的做法是:

1、遇到左括號「(」,將下標放入棧中,

2、遇到右括號「)」,彈出棧頂元素匹配右括號

如果棧為空,說明當前的右括號為沒有被匹配的右括號,我們將其下標放入棧中來更新我們之前提到的最後乙個沒有被匹配的右括號的下標

如果棧不為空,當前右括號的下標減去棧頂元素即為以該右括號為結尾的最長有效括號的長度

我們從0開始遍歷字串,不斷更新即可。

一開始棧為空,第乙個字元為左括號的時候我們會將其放入棧中,這樣就不滿足提及的「最後乙個沒有被匹配的右括號的下標」,為了保持統一,我們在一開始的時候往棧中放入乙個值為 -1−1 的元素。

這是乙個時間、空間複雜度均為 o(n)的解法,是否可以存在空間複雜度為 o(1)的解法呢?

b bd 完成括號匹配(記錄左括號數)

給出乙個括號序列s,允許你在s的開始和結尾處新增一定數量的左括號 或者右括號 使其變為乙個合法的括號匹配序列。你能求出新增最少的括號之後的合法的括號匹配序列是什麼嗎?思路 實時記錄左括號的數量l,如果遇到右括號時,若左括號數量l為0,則證明需要在當前右括號前面增加乙個左括號 def solve s ...

括號匹配演算法

檢驗括號是否匹配的方法可以用 期待的急迫程度 這個概念來描述。例如,考慮下列括號序列 1 2 3 4 5 6 7 8 當計算機接受了第乙個括號後,它期待著與其匹配的第八個括號的出現,然而等來的卻是第二個括號,此時第乙個括號 只能暫時靠邊,而迫切等待與第二個括號相匹配的 第七個括號 的出現,類似地,因...

括號匹配演算法

題目 有一段字串,包含 和 和 中的一種或者多種,這三種括號出現次序不定,可隨意巢狀。編寫 判斷三種括號是否正確匹配。思路一 棧的思想 括號匹配是運用棧的經典思想。在 演算法中設定乙個空棧,每次讀入乙個括號,若是左括號,則壓入棧中,等到對應的右括號壓棧,若是右括號,能使置於棧頂的最急迫的期待得以消解...