leetcode刷題 棧與遞迴 有效的括號

2021-10-13 17:46:28 字數 1310 閱讀 8445

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

有效字串需滿足:

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

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

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

示例 1:

輸入: 「()」

輸出: true

示例 2:

輸入: 「(){}」

輸出: true

示例 3:

輸入: 「(]」

輸出: false

示例 4:

輸入: 「([)]」

輸出: false

示例 5:

輸入: 「」

輸出: true

拿到這題的時候,一開始是考慮使用switch來完成的,然後感覺這樣寫**就很臃腫,肯定有更好的寫法。所以去看了題解,我本來的想法是定義變數來臨時存放括號的對應,看了題解發現可以用map來存放,長知識了。

class

solution

deque

fuhao =

newarraydeque

<

>()

; map

duizhao =

newhashmap

()','}

;for

(int i =

0;i < n;i++

) fuhao.

removelast()

;}else

}return fuhao.

isempty()

;}}

判斷括號的有效性可以使用「棧」這一資料結構來解決。

我們對給定的字串 sss 進行遍歷,當我們遇到乙個左括號時,我們會期望在後續的遍歷中,有乙個相同型別的右括號將其閉合。由於後遇到的左括號要先閉合,因此我們可以將這個左括號放入棧頂。

當我們遇到乙個右括號時,我們需要將乙個相同型別的左括號閉合。此時,我們可以取出棧頂的左括號並判斷它們是否是相同型別的括號。如果不是相同的型別,或者棧中並沒有左括號,那麼字串 sss 無效,返回 false\textfalse。為了快速判斷括號的型別,我們可以使用雜湊對映(hashmap)儲存每一種括號。雜湊對映的鍵為右括號,值為相同型別的左括號。

在遍歷結束後,如果棧中沒有左括號,說明我們將字串 sss 中的所有左括號閉合,返回 true\texttrue,否則返回 false\textfalse。

注意到有效字串的長度一定為偶數,因此如果字串的長度為奇數,我們可以直接返回 false\textfalse,省去後續的遍歷判斷過程。

leetcode刷題總結之遞迴

前言 最近刷完leetcode遞迴的專題了,無奈本人很菜,關於遞迴每次都是看大佬的題解,自己也設計不出來遞迴,今日打算從遞迴本質出發,徹底剖析遞迴。本文中的大部分遞迴思想來自 遞迴的內涵與經典應用。在數學與電腦科學中,遞迴 recursion 是指在函式的定義中使用函式自身的方法。實際上,遞迴,顧名...

leetcode刷題筆記 棧1

給定兩個沒有重複元素的陣列 nums1 和 nums2 其中nums1 是 nums2 的子集。找到 nums1 中每個元素在 nums2 中的下乙個比其大的值。nums1 中數字 x 的下乙個更大元素是指 x 在 nums2 中對應位置的右邊的第乙個比 x 大的元素。如果不存在,對應位置輸出 1。...

leetcode刷題筆記 棧4

給出由小寫字母組成的字串 s,重複項刪除操作會選擇兩個相鄰且相同的字母,並刪除它們。在 s 上反覆執行重複項刪除操作,直到無法繼續刪除。在完成所有重複項刪除操作後返回最終的字串。答案保證唯一。輸入 abbaca 輸出 ca 解釋 例如,在 abbaca 中,我們可以刪除 bb 由於兩字母相鄰且相同,...