力扣--20. 有效的括號

目錄

題目

思路?

注意


題目

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

有效字符串需滿足:

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

示例 1:

輸入:s = "()"
輸出:true

示例?2:

輸入:s = "()[]{}"
輸出:true

示例?3:

輸入:s = "(]"
輸出:false

提示:

  • 1 <= s.length <= 104
  • s?僅由括號?'()[]{}'?組成

思路?

不匹配的情況:

  1. 第一種情況,字符串里左方向的括號多余了 ,所以不匹配。 比如:[ { } ]? ( )

? ? ?已經遍歷完了字符串,但是棧不為空,說明有相應的左括號沒有右括號來匹配,所以return false

? ? ?2.第二種情況,括號沒有多余,但是 括號的類型沒有匹配上。 比如 ( [ { } }

? ? ? 遍歷字符串匹配的過程中,發現棧里沒有要匹配的字符。所以return false

? ? ?3.第三種情況,字符串里右方向的括號多余了,所以不匹配。比如:{([ ])} ) )

? ? ?遍歷字符串匹配的過程中,棧已經為空了,沒有匹配的字符了,說明右括號沒有找到對應的左括號return false

代碼

class Solution {public boolean isValid(String s) {
Deque<Character> stack = new LinkedList<>();//定義一個棧
for(int i=0;i<s.length();i++){//遍歷schar c=s.charAt(i);if (c=='('){//這里的思路是只要有左邊的要想匹配就得有右括號,所以我遍歷考慮左括號,把右邊的放入棧中,到時候匹配,如果成功則出棧,若沒有則返回falsestack.push(')');}else if (c=='['){stack.push(']');}else if (c=='{'){stack.push('}');}else{if(!stack.isEmpty() && c==stack.peek()){//前面的條件是如果這個括號是)(的話,沒有這個條件就會判斷錯誤。因為第一個是),就會直接來到這個else,但是此時棧還是空的,會得到null,但是他還要和前面基本類型的char作比較,所以他會嘗試把null轉換為基本類型的char,無法按轉換就會拋出空指針異常stack.pop();}else{return false;}}
}
return stack.isEmpty(); //最后遍歷完如果棧還不為空,那么就不匹配。}}
class Solution {public boolean isValid(String s) {Deque<Character> deque = new LinkedList<>();char ch;for (int i = 0; i < s.length(); i++) {ch = s.charAt(i);//碰到左括號,就把相應的右括號入棧if (ch == '(') {deque.push(')');}else if (ch == '{') {deque.push('}');}else if (ch == '[') {deque.push(']');} else if (deque.isEmpty() || deque.peek() != ch) {//這里用或而不是和是因為如果這個是空棧,和的情況還要取出空棧的棧頂元素,會報錯,所以二者順序不能改變且必須用和return false;}else {//如果是右括號判斷是否和棧頂元素匹配deque.pop();}}//最后判斷棧中元素是否匹配return deque.isEmpty();}
}

注意

在寫c=='('的時候我們用的是單引號,如果用雙引號就會報錯

  1. 雙引號(" "):
  • 雙引號用于表示字符串(String),是一個字符序列。
  • 字符串是不可變的,一旦創建后,其內容不能被修改。
  • 用雙引號括起來的內容可以包含任意字符,包括字母、數字、符號、空格等

? ? ?2.單引號(’ '):

  • 單引號用于表示字符(char),是一個單個字符。
  • 字符是基本數據類型,表示一個Unicode字符,只能包含一個字符。
  • 用單引號括起來的內容只能是單個字符,例如字母、數字、符號,但不能是字符串。

?而在這個代碼中我們定義的c屬于char類型,所以只能用單引號

還有一個簡化操作:要想括號匹配,那么她一定是偶數個,所以可以如果是奇數,可以直接返回false,簡化代碼

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

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

相關文章

DP討論——適配器模式

學而時習之&#xff0c;溫故而知新。 敵人出招&#xff08;使用場景&#xff09; 說是自己的程序對接第三方的庫&#xff0c;但是自己的代碼的接口設計完畢了&#xff0c;如何對接上&#xff1f; 你出招 適配器模式就是為此而生的——我覺得應該是該解決方法被命名為了適配…

滯后序列分析案例詳解

一個半小時 超出30分鐘 日期&#xff1a;2024-07-13 19:14:33 回放 摘要 Python在行為分析中的應用 主要講述了如何使用Python處理序列數據&#xff0c;以及如何結合定性分析和定量分析來全面分析課程內容。講者提到了一種叫做分層法的分類方法&#xff0c;該方法使用了布魯…

ArcGIS Pro SDK (九)幾何 2 坐標

ArcGIS Pro SDK &#xff08;九&#xff09;幾何 2 坐標 文章目錄 ArcGIS Pro SDK &#xff08;九&#xff09;幾何 2 坐標1 矢量極坐標2 獲取矢量傾角3 獲取矢量方位角4 向量運算5 2D 矢量操作6 生成器 環境&#xff1a;Visual Studio 2022 .NET6 ArcGIS Pro SDK 3.0 1 矢量…

知識圖譜數據庫基本知識

文章目錄 知識圖譜數據模型知識圖譜查詢語言隨著知識圖譜規模的日益增長,數據管理愈加重要。一方面,以文件形式保存的知識圖譜顯然無法滿足用戶的查詢、檢索、推理、分析及各種應用需求;另一方面,傳統數據庫的關系模型與知識圖譜的圖模型之間存在顯著差異,關系數據庫無法有…

ctfshow-web入門-php特性(web96-web99)

目錄 1、web96 2、web97 3、web98 4、web99 1、web96 試了下通配、轉義、拼接、大小寫都不行 這里使用絕對路徑或者當前路徑繞過&#xff1a; ?u./flag.php ?u/var/www/html/flag.php 還可以使用 php 偽協議&#xff1a; ?uphp://filter/resourceflag.php 2、web97 關…

數據結構(Java):力扣Stack集合OJ題

1、括號匹配問題 . - 力扣&#xff08;LeetCode&#xff09; 1.1 思路分析 根據棧的先進后出原則&#xff0c;我們可以這樣解決問題&#xff1a; 遍歷字符串&#xff0c;遇見左括號就將左括號push入棧&#xff1b;遇見右括號就pop出棧&#xff0c;將出棧的元素和該右括號比較…

pyparsing開啟調試

在要匹配的表達后添加set_debug

【密碼學】實現消息認證或數字簽名的幾種方式

消息認證的目的是驗證消息的完整性和確認消息的來源。數字簽名的目的是不僅驗證消息的完整性和來源&#xff0c;還提供了不可否認性。此外&#xff0c;數字簽名還可以驗證消息的創建時間&#xff0c;防止重放攻擊。那么具體有哪些實現的方式呢&#xff1f; 一、僅提供消息認證…

python練習(if--else)

通過input語句獲取鍵盤輸入的身高 判斷身高是否超過120cm&#xff0c;并通過print給出提示信息。 代碼輸出示例&#xff1a; 1.歡迎來到樂園。 請輸入你的身高&#xff08;cm&#xff09;&#xff1a;130 您的身高超出120cm&#xff0c;游玩需要夠票10元。 祝您游玩愉快。 2…

文件內容查閱

cat concatenate files and print on the standard output Linux中一個最簡單的且最常用的命令是cat命令。其功能是在終端設備上顯示文件內容。 cat命令-n選項用于顯示行號。 tac concatenate and print files in reverse tac命令的功能是用于反向顯示文件內容&#xff0c;即…

計算機網絡復習筆記【面向考綱整理】

計算機網絡復習筆記 一、計算機網絡體系結構&#xff08;一&#xff09;計算機網絡的概念、分類、組成與功能1.計算機網絡的概念、組成與功能1.1計算機網絡的概念1.2計算機網絡的組成1.3計算機網絡的功能 2.計算機網絡的分類3.計算機網絡的標準化工作及相關知識 &#xff08;二…

MT6816磁編碼IC在工控機器人中的應用

在現代工業自動化領域&#xff0c;高精度的位置檢測和控制技術對于機器人系統的穩定運行至關重要。MT6816磁編碼IC作為一款先進的磁傳感器解決方案&#xff0c;以其卓越的性能和穩定性&#xff0c;在工控機器人中得到了廣泛的應用。本文將詳細探討MT6816磁編碼IC在工控機器人中…

azure學習在日本IT工作的重要性

在日本數字化轉型的浪潮中,微軟Azure已經成為眾多企業的首選云平臺。作為全球第二大云服務提供商,Azure在日本市場的重要性與日俱增。本文將探討為什么學習Azure對日本IT專業人士至關重要,以及如何通過lalapodo云原生技術的培訓課程,快速掌握這一關鍵技能。 Azure在日本的戰略地…

血液及造血系統疾病病人的護理

一、血液及造血系統疾病病人的基礎護理 對于患有血液及造血系統疾病的病人&#xff0c;護理工作的重點首先在于密切監測生命體征&#xff0c;包括體溫、心率、呼吸頻率和血壓。 飲食護理也十分關鍵&#xff0c;要保證病人攝入充足的營養&#xff0c;以增強抵抗力。例如&#xf…

【Django+Vue3 線上教育平臺項目實戰】構建高效線上教育平臺之首頁模塊

文章目錄 前言一、導航功能實現a.效果圖&#xff1a;b.后端代碼c.前端代碼 二、輪播圖功能實現a.效果圖b.后端代碼c.前端代碼 三、標簽欄功能實現a.效果圖b.后端代碼c.前端代碼 四、側邊欄功能實現1.整體效果圖2.側邊欄功能實現a.效果圖b.后端代碼c.前端代碼 3.側邊欄展示分類及…

element UI時間組件兩種使用方式

加油&#xff0c;新時代打工&#xff01; 組件官網&#xff1a;https://element.eleme.cn/#/zh-CN/component/date-picker 先上效果圖&#xff0c;如下&#xff1a; 第一種實現方式 <div class"app-container"><el-formref"submitForm":model&q…

Linux C++ 052-設計模式之享元模式

Linux C 052-設計模式之享元模式 本節關鍵字&#xff1a;Linux、C、設計模式、享元模式 相關庫函數&#xff1a; 概念 享元模式&#xff08;FlyWeight&#xff09;&#xff0c;運用共享技術有效的支持大量細粒度的對象。 典型的享元模式的例子為文書處理器中以圖形結構來表…

探索 Prompt 的世界:讓你的 AI 更智能

探索 Prompt 的世界&#xff1a;讓你的 AI 更智能 引言什么是 Prompt&#xff1f;Prompt 的重要性如何編寫有效的 Prompt1. 清晰明確2. 包含關鍵細節3. 提供上下文 實踐中的 Prompt 技巧1. 多次迭代2. 實驗不同風格3. 結合實際應用 總結 引言 隨著人工智能&#xff08;AI&…

數據恢復篇:適用于 Android 的恢復工具

正在擺弄 Android 設備。突然&#xff0c;您意外刪除了一張或多張圖片。不用擔心&#xff0c;您總能找到一款價格實惠的照片恢復應用。這款先進的軟件可幫助 Android 用戶從硬盤、安全數字 (SD) 或存儲卡以及數碼相機中恢復已刪除的圖片。 Android 上文件被刪除的主要原因 在獲…

采用自動微分進行模型的訓練

自動微分訓練模型 簡單代碼實現&#xff1a; import torch import torch.nn as nn import torch.optim as optim# 定義一個簡單的線性回歸模型 class LinearRegression(nn.Module):def __init__(self):super(LinearRegression, self).__init__()self.linear nn.Linear(1, 1) …