leetcode20 有效的括號

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

有效字符串需滿足:

左括號必須用相同類型的右括號閉合。
左括號必須以正確的順序閉合。
注意空字符串可被認為是有效字符串。

示例 1:

輸入: "()"
輸出: true
示例?2:

輸入: "()[]{}"
輸出: true
示例?3:

輸入: "(]"
輸出: false
示例?4:

輸入: "([)]"
輸出: false
示例?5:

輸入: "{[]}"
輸出: true

思路:

初始化棧 S。

  1. 一次處理表達式的每個括號。
  2. 如果遇到開括號,我們只需將其推到棧上即可。這意味著我們將稍后處理它,讓我們簡單地轉到前面的 子表達式。
  3. 如果我們遇到一個閉括號,那么我們檢查棧頂的元素。如果棧頂的元素是一個 相同類型的 左括號,那么我們將它從棧中彈出并繼續處理。否則,這意味著表達式無效。
  4. 如果到最后我們剩下的棧中仍然有元素,那么這意味著表達式無效。
class Solution {// Hash table that takes care of the mappings.private HashMap<Character, Character> mappings;// Initialize hash map with mappings. This simply makes the code easier to read.public Solution() {this.mappings = new HashMap<Character, Character>();this.mappings.put(')', '(');this.mappings.put('}', '{');this.mappings.put(']', '[');}public boolean isValid(String s) {// Initialize a stack to be used in the algorithm.Stack<Character> stack = new Stack<Character>();for (int i = 0; i < s.length(); i++) {char c = s.charAt(i);// If the current character is a closing bracket.if (this.mappings.containsKey(c)) {// Get the top element of the stack. If the stack is empty, set a dummy value of '#'char topElement = stack.empty() ? '#' : stack.pop();// If the mapping for this bracket doesn't match the stack's top element, return false.if (topElement != this.mappings.get(c)) {return false;}} else {// If it was an opening bracket, push to the stack.stack.push(c);}}// If the stack still contains elements, then it is an invalid expression.return stack.isEmpty();}
}

?

?

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

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

相關文章

python模塊(6)-Pandas 簡易使用教程

Pandas 簡易教程1.Pandas簡介2.創建2.1創建dataFrame2.2創建Series3.dataframe數據訪問3.1 獲取一列--列標簽3.2 獲取多列--列標簽列表3.3 獲取一行--行標簽.loc()3.4 獲取多行--行切片操作.loc()3.5 index 獲取行列信息--df.iloc()3.6 獲取一個元素3.7 布爾值選擇數據4.datafr…

windows 如何查看端口占用情況?

開始--運行--cmd 進入命令提示符 輸入netstat -ano 即可看到所有連接的PID 之后在任務管理器中找到這個PID所對應的程序如果任務管理器中沒有PID這一項,可以在任務管理器中選"查看"-"選擇列" 經常,我們在啟動應用的時候發現系統需要的端口被別的…

泛型lua的for循環以及lua的特殊的dowhile循環

范型for循環&#xff1a; -- print all values of array a a{1,2,3,4,5,6,7}; for i,v in ipairs(a) do print(v) end 范型for遍歷迭代子函數返回的每一個值。 再看一個遍歷表key的例子&#xff1a; -- print all keys of table t map {["gaoke"]1,["gaoxin&…

leetcode1 兩數之和

給定一個整數數組 nums 和一個目標值 target&#xff0c;請你在該數組中找出和為目標值的那 兩個 整數&#xff0c;并返回他們的數組下標。 你可以假設每種輸入只會對應一個答案。但是&#xff0c;你不能重復利用這個數組中同樣的元素。 示例: 給定 nums [2, 7, 11, 15], t…

Linux(5)-用戶/權限-adduser,su,chmod

用戶、權限管理1. adduserstep1: 添加新用戶step2: 賦予sudo權限。step3: 刪除用戶2. useradd &#xff08;建議不要使用&#xff09;3. 切換用戶su4. 查看系統中所有用戶5. 修改用戶對路徑/文件的讀寫權限1. adduser step1: 添加新用戶 sudo adduser username 按照提示輸入新…

網絡游戲服務器架構

網絡游戲一般采用C/S結構&#xff0c;客戶端負責繪制游戲世界的實時畫面&#xff0c;服務器端則負責響應所有客戶端的連接請求和游戲邏輯處理&#xff0c;并控制所有客戶端的畫面繪制&#xff0c;客戶端與服務器通過網絡數據包交互完成每一步游戲邏輯。 網關服務器方式&#x…

leetcode3 無重復字符最長子串

給定一個字符串&#xff0c;請你找出其中不含有重復字符的 最長子串 的長度。 示例 1: 輸入: "abcabcbb" 輸出: 3 解釋: 因為無重復字符的最長子串是 "abc"&#xff0c;所以其長度為 3。 示例 2: 輸入: "bbbbb" 輸出: 1 解釋: 因為無重復字符…

如何正確編寫linux守護進程

1、守護進程&#xff0c;也就是通常說的Daemon進程&#xff0c;是Linux中的后臺服務進程。它是一個生存期較長的進程&#xff0c;通常獨立于控制終端并且周期性地執行某種任務或等待處理某些發生的事件。如果想讓某個進程不因為用戶或終端或其他地變化而受到影響&#xff0c;那…

Linux(6)-命令行的使用,history,shell腳本

命令行的使用,shell腳本1.終端shell,man1.1 Ctrlr--匹配查找歷史命令1.2 history [n] --列出歷史命令1.3&#xff01;--執行歷史命令2.shell 編程2.1 shell腳本2.2 注釋2.3 指明所用的shell2.4 支持函數2.5 使用變量2.6 解析命令行參數2.7 if, for, case, while2.8 shell腳本中…

lua元表的理解

元表概念 &#xff08; Metatable&#xff09;元表由鍵名為 事件 (event) 和其中的值叫作元方法 (metamethod)組成。在lua中每個值都有一個元表。而table和userdata所定義的值允許自定義對應的元表&#xff0c;其他都是用統一的元表。我的理解&#xff0c;元表&#xff0c;其實…

程序以及論文

本人長期承接大學計算機專業的畢業設計和論文的編寫。 主要開發語言C&#xff0c;C &#xff08;windows或linux平臺皆可&#xff09;&#xff0c;php&#xff0c;c#&#xff0c;VC 。 課題內容可以是 管理系統&#xff0c;可以是 網站設計開發 可以是 網絡聊天 可以是 應用…

Github(1)-概覽,初始化倉庫

Github網頁-本地git1.github網頁1.1 主要界面1.1.1github主頁1.1.2倉庫主頁1.1.3 個人頁面1.2 注冊github賬號1.3 新建平臺倉庫2.git-本地倉庫2.1 git本地倉庫的三個區域2.2 創建一個本地倉庫GitHub 本質上是一個代碼托管平臺&#xff0c;它提供的是基于 Git 的代碼托管服務。G…

Lua 協程

Lua里的協程是一個原來沒見過的東西&#xff0c;Python的Gevent也是一個基于coroutine的python網絡開發框架。性能據說很不錯。協同的一個關鍵特征是它可以不斷顛倒調用者與被調用者之間的關系協程和一般多線程的區別是&#xff0c;一般多線程由系統決定該哪個線程執行&#xf…

leetcode16 最接近的三數之和

給定一個包括 n 個整數的數組 nums 和 一個目標值 target。找出 nums 中的三個整數&#xff0c;使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。 例如&#xff0c;給定數組 nums [-1&#xff0c;2&#xff0c;1&#xff0c;-4], 和 target 1…

LINUX下動態鏈接庫的使用-dlopen dlsym dlclose dlerror

dlopen 基本定義   功能&#xff1a;打開一個動態鏈接庫 包含頭文件&#xff1a; #include <dlfcn.h> 函數定義&#xff1a; void * dlopen( const char * pathname, int mode ); 函數描述&#xff1a; 在dlopen的&#xff08;&#xff09;函數以指定模式打開指定的動…

leecode11 盛水最多的容器

給定 n 個非負整數 a1&#xff0c;a2&#xff0c;...&#xff0c;an&#xff0c;每個數代表坐標中的一個點 (i, ai) 。在坐標內畫 n 條垂直線&#xff0c;垂直線 i 的兩個端點分別為 (i, ai) 和 (i, 0)。找出其中的兩條線&#xff0c;使得它們與 x 軸共同構成的容器可以容納最多…

Github(2)-本地配置git

本地配置git1.注冊賬號2.安裝git工具3.配置git 賬號1.注冊賬號 github網頁注冊github賬戶 2.安裝git工具 本地安裝git工具 step1 查看是否安裝git git version step2 mac 安裝 brew install git step2 linux安裝 sudo apt-get install git 3.配置git 賬號 創建ssh key, 配置…

lua面向對象編程之點號與冒號的差異詳細比較

首先,先來一段在lua創建一個類與對象的代碼 Class {}Class.__index Classfunction Class:new(x,y)local temp {}setmetatable(temp, Class)temp.x xtemp.y yreturn tempendfunction Class:test()print(self.x,self.y)endobject Class.new(10,20)object:test() 猜一下會輸…

lua __index __newindex upvalue 示例

項目中有個公會對象&#xff0c;數據大部分存在data中&#xff0c;之前都是 u.data.point這樣訪問&#xff0c;太麻煩了。 于是通過設置__index 使之可以直接訪問屬性&#xff0c;u.point。 但是還是不能直接改屬性&#xff0c;u.point 4&#xff0c;所以再設置了__newindex…

leecode26 刪除排序數組中的重復項

給定一個排序數組&#xff0c;你需要在原地刪除重復出現的元素&#xff0c;使得每個元素只出現一次&#xff0c;返回移除后數組的新長度。 不要使用額外的數組空間&#xff0c;你必須在原地修改輸入數組并在使用 O(1) 額外空間的條件下完成。 示例 1: 給定數組 nums [1,1,2…