【LeetCode20】有效的括號

題目描述

給定一個只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判斷字符串是否有效。

有效字符串需滿足:

左括號必須用相同類型的右括號閉合。
左括號必須以正確的順序閉合。
每個右括號都有一個對應的相同類型的左括號。

思路與算法

  1. 棧的使用:
    當我們遍歷字符串 s 中的每個字符時:
    • 如果遇到 左括號(‘(’, ‘{’, ‘[’),我們將其壓入棧中。
    • 如果遇到 右括號(), }, ]),我們檢查棧頂的元素:
      • 如果棧為空,說明沒有對應的左括號,返回 False。
      • 如果棧頂元素是對應的左括號(例如,遇到 ) 時,棧頂應該是 ‘(’),則將棧頂元素彈出,繼續檢查下一個字符。
      • 如果匹配不成功,立即返回 False。
  2. 字符串遍歷完成后:
    如果棧為空,說明所有的括號都已成功匹配,返回 True。
    如果棧不為空,說明還有未匹配的左括號,返回 False。

代碼

class Solution:def isValid(self, s: str) -> bool:# 初始化一個棧來存儲左括號stack = []# 初始化哈希表,存儲括號的配對關系bracket_map = {')':'(', '}':'{',']':'['}# 遍歷for char in s:# 如果是右括號if char in bracket_map:# 檢查棧頂是否匹配top_element = stack.pop() if stack else '#'if top_element != bracket_map[char]:return Falseelse:stack.append(char)return not stack

使用一個哈希表 bracket_map 來存儲右括號對應的左括號映射。這樣當遇到一個右括號時,我們就可以通過查找哈希表快速獲得它對應的左括號 if top_element != bracket_map[char]:

此外,在字典中,in 運算符默認檢查的是字典的鍵,而不是值。

總結

  1. 在 Python 中,列表有以下幾種方法可以幫助我們模擬棧的行為:
    append(x):將元素 x 推入棧的頂部(即列表的末尾)。
    pop():移除并返回棧頂部的元素(即列表的最后一個元素)。
    這兩個方法完美地支持棧的基本操作(壓棧和彈棧),因此我們可以利用列表來實現棧的功能。
  2. 使用棧和哈希表處理括號匹配是常見的技巧.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/70749.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70749.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/70749.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

算法訓練(leetcode)二刷第三十七天 | *300. 最長遞增子序列、674. 最長連續遞增序列、*718. 最長重復子數組

刷題記錄 *300. 最長遞增子序列674. 最長連續遞增序列基礎解法(非動規)動態規劃 718. 最長重復子數組滾動數組 *300. 最長遞增子序列 leetcode題目地址 dp數組含義: dp[i]表示以nums[i]結尾的最長遞增子序列長度,即以nums[i]結尾…

Elasticsearch 相關面試題

1. Elasticsearch基礎 Elasticsearch是什么? Elasticsearch是一個分布式搜索引擎,基于Lucene實現。 Mapping是什么?ES中有哪些數據類型? Mapping:定義字段的類型和屬性。 數據類型:text、keyword、integer、…

TCP/IP的分層結構、各層的典型協議,以及與ISO七層模型的差別

1. TCP/IP的分層結構 TCP/IP模型是一個四層模型,主要用于網絡通信的設計和實現。它的分層結構如下: (1) 應用層(Application Layer) 功能:提供應用程序之間的通信服務,處理特定的應用細節。 典型協議&am…

pycharm技巧--鼠標滾輪放大或縮小 Pycharm 字體大小

1、鼠標滾輪調整字體 設置 Ctrl 鼠標滾輪調整字體大小 備注: 第一個是活動窗口,即縮放當前窗口 第二個是所有編輯器窗口,即縮放所有窗口的字體 2、插件 漢化包: Chinese Simplified 包

硬件工程師入門教程

1.歐姆定律 測電壓并聯使用萬用表測電流串聯使用萬用表,紅入黑出 2.電阻的阻值識別 直插電阻 貼片電阻 3.電阻的功率 4.電阻的限流作用 限流電阻阻值的計算 單位換算關系 5.電阻的分流功能 6.電阻的分壓功能 7.電容 電容簡單來說是兩塊不連通的導體加上中間的絕…

edge瀏覽器將書簽欄頂部顯示

追求效果,感覺有點丑,但總歸方便多了 操作路徑:設置-外觀-顯示收藏夾欄-始終

【SPIE出版,見刊快速,EI檢索穩定,浙江水利水電學院主辦】2025年物理學與量子計算國際學術會議(ICPQC 2025)

2025年物理學與量子計算國際學術會議(ICPQC 2025)將于2025年4月18-20日在中國杭州舉行。本次會議旨在匯聚全球的研究人員、學者和業界專家,共同探討物理學與量子計算領域的最新進展與前沿挑戰。隨著量子技術的快速發展,其在信息處…

谷歌瀏覽器更新后導致的刷新數據無法顯示

這幾天突然出現的問題,就是我做了一個網站,一直用Google展示,前兩天突然就是刷新會丟失數據,然后再刷新幾次吧又有了,之前一直好好的,后端也做了一些配置添加了CrossOrigin注解,然而換了edge瀏覽…

UE5從入門到精通之多人游戲編程常用函數

文章目錄 前言一、權限與身份判斷函數1. 服務器/客戶端判斷2. 網絡角色判斷二、網絡同步與復制函數1. 變量同步2. RPC調用三、連接與會話管理函數1. 玩家連接控制2. 網絡模式判斷四、實用工具函數前言 UE5給我們提供了非常強大的多人網路系統,讓我們可以很方便的開發多人游戲…

軟件需求管理辦法,軟件開發管理指南(Word原件)

1. 目的 2. 適用范圍 3. 參考文件 4. 術語和縮寫 5. 需求獲取的方式 5.1. 與用戶交談向用戶提問題 5.1.1. 訪談重點注意事項 5.1.2. 訪談指南 5.2. 參觀用戶的工作流程 5.3. 向用戶群體發調查問卷 5.4. 已有軟件系統調研 5.5. 資料收集 5.6. 原型系統調研 5.6.1. …

利用python和gpt寫一個conda環境可視化管理工具

最近在學習python,由于不同的版本之間的差距較大,如果是用環境變量來配置python的話,會需要來回改,于是請教得知可以用conda來管理,但是conda在管理的時候老是要輸入命令,感覺也很煩,于是讓gpt幫…

【復習】計算機網絡

網絡模型 OSI 應用層:給應用程序提供統一的接口表示層:把數據轉換成兼容另一個系統能識別的格式會話層:負責建立、管理、終止表示層實體之間的通信會話傳輸層:負責端到端的數據傳輸網絡層:負責數據的路由、轉發、分片…

圖書館系統源碼詳解

本項目是一個基于Scala語言開發的圖書館管理系統。系統主要由以下幾個部分組成:數據訪問層(DAO)、數據模型層(Models)、服務層(Service)以及用戶界面層(UI)。以下是對項目…

Redis——用戶簽到BitMap,UV統計

目錄 BitMap 使用場景 1. 用戶簽到系統 2. 用戶行為標記 3. 布隆過濾器(Bloom Filter) BitMap介紹 Redis中的使用 Redis功能示例 添加: 獲取: 批量獲取: java中實現 統計本月連續簽到次數 UV統計 UV 統計…

【數據庫】【MySQL】索引

MySQL中索引的概念 索引(MySQL中也叫做"鍵(key)")是一種數據結構,用于存儲引擎快速定找到記錄。 簡單來說,它類似于書籍的目錄,通過索引可以快速找到對應的數據行,而無需…

【SpringBoot AI 集成DeepSeek 大模型API調用】

當DeepSeek開始盛行,提供強大的大語言模型,界面調用不能滿足我們的需要,同時提供API接口供我們在服務中調用,來實現各種AI場景。 我們通過將DeepSeek的AI能力與SpringBoot AI相結合,實現智能聊天、問答機器人&#xf…

Linux 性能更好的ftp客戶端 lftp 使用詳解

簡介 LFTP 是一個命令行 FTP 客戶端,支持多種文件傳輸協議,包括 FTP、FTPS、HTTP、HTTPS和SFTP 。它以其通過鏡像、后臺操作和腳本支持等特性有效管理復雜傳輸的能力而聞名。 安裝 Ubuntu/Debian sudo apt update sudo apt install lftpCentOS/RHEL/…

汽車智能制造企業數字化轉型SAP解決方案總結

一、項目實施概述 項目階段劃分: 藍圖設計階段主數據管理方案各模塊藍圖設計方案下一階段工作計劃 關鍵里程碑: 2022年6月6日:項目啟動會2022年12月1日:系統上線 二、總體目標 通過SAP實施,構建研產供銷協同、業財一…

【深度學習】矩陣的理解與應用

一、矩陣基礎知識 1. 什么是矩陣? 矩陣是一個數學概念,通常表示為一個二維數組,它由行和列組成,用于存儲數值數據。矩陣是線性代數的基本工具之一,廣泛應用于數學、物理學、工程學、計算機科學、機器學習和數據分析等…

<網絡> UDP協議

目錄 傳輸層 再談端口號 端口號范圍劃分 認識知名端口號 兩個問題 netstat與iostat pidof UDP協議 UDP協議格式 UDP數據封裝: UDP數據分用: UDP協議的特點 面向數據報 UDP的緩沖區 UDP使用注意事項 基于UDP的應用層協 傳輸層 在學習HTTP等應用層協議時&…