成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

LeetCode題解之有效的括號(棧)

開發(fā) 前端
棧是什么,很金典的比喻就是把 棧 比喻成疊盤子,一個個疊上去,然后拿的時候會先拿最上面的,也就是最后疊上去的那個。

[[384434]]

前言

說完了鏈表,我們再看看棧。

理解棧

棧是什么,很金典的比喻就是把 棧 比喻成疊盤子,一個個疊上去,然后拿的時候會先拿最上面的,也就是最后疊上去的那個。

先進者后出、后進者先出,這就是棧結(jié)構(gòu)。

實際應(yīng)用

那么棧在實際應(yīng)用中有什么場景呢?

可太多了,比如Activity中的任務(wù)棧,編譯器實現(xiàn)方法表達式,瀏覽器的前進后退。

這里拿瀏覽器的前進后退做例子。

  • 在瀏覽器中,每打開一個頁面,就把這個頁面入棧,然后點擊后退的時候就將頁面出棧。這是不是挺像Activity頁面的任務(wù)棧的。
  • 如果有前進功能,那么就再需要一個棧,當點擊后退的時候,就把頁面從A棧出,然后進入B棧,這樣點擊前進的時候,就能從B棧重新回到A棧了。

1)瀏覽網(wǎng)頁,每打開一個網(wǎng)頁就入棧A。比如這里打開了網(wǎng)頁M和網(wǎng)頁N。

 

2)點擊后退,網(wǎng)頁N出棧A,入棧B。

 

3)點擊前進,網(wǎng)頁N出棧B,入棧A。

 

Java中的棧類

在Java中,棧的對應(yīng)類為Stack。

  1. //初始化棧 
  2. Stack<String> stack =new Stack<String>(); 
  3.  
  4. //入棧 
  5. stack.push("test"); 
  6.  
  7. //出棧,返回出棧的元素 
  8. String str=stack.pop(); 

算法題

還是老樣子,來一題棧相關(guān)的算法題。

題目

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

有效字符串需滿足:

左括號必須用相同類型的右括號閉合。左括號必須以正確的順序閉合。

示例 1:輸入:s = "()" 輸出:true

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

示例 4:輸入:s = "([)]" 輸出:false

示例 5:輸入:s = "{[]}" 輸出:true

解法

解法就是利用棧了。

遇到左括號入棧,遇到右括號就把相應(yīng)的左括號出棧,如果右括號和要出棧的這個元素不一致,就說明括號沒有成對。

關(guān)于左括號和右括號的對應(yīng)關(guān)系,可以用HashMap來存儲,來一起看看:

  1. public boolean isValid(String s) { 
  2.         int n = s.length(); 
  3.         if (n % 2 == 1) { 
  4.             return false
  5.         } 
  6.  
  7.         Map<CharacterCharacter> pairs = new HashMap<CharacterCharacter>() {{ 
  8.             put(')''('); 
  9.             put(']''['); 
  10.             put('}''{'); 
  11.         }}; 
  12.         Deque<Character> stack = new LinkedList<Character>(); 
  13.         for (int i = 0; i < n; i++) { 
  14.             char ch = s.charAt(i); 
  15.             if (pairs.containsKey(ch)) { 
  16.                 if (stack.isEmpty() || stack.peek() != pairs.get(ch)) { 
  17.                     return false
  18.                 } 
  19.                 stack.pop(); 
  20.             } else { 
  21.                 stack.push(ch); 
  22.             } 
  23.         } 
  24.         return stack.isEmpty(); 
  25.     } 

也有比較靈活的辦法,就是入棧的時候就確定好括號的對應(yīng)關(guān)系,直接入棧左括號對應(yīng)的右括號。

  1. public boolean isValid(String s) { 
  2.         if(s.isEmpty()) 
  3.             return true
  4.         Stack<Character> stack=new Stack<Character>(); 
  5.         for(char c:s.toCharArray()){ 
  6.             if(c=='('
  7.                 stack.push(')'); 
  8.             else if(c=='{'
  9.                 stack.push('}'); 
  10.             else if(c=='['
  11.                 stack.push(']'); 
  12.             else if(stack.empty()||c!=stack.pop()) 
  13.                 return false
  14.         } 
  15.         if(stack.empty()) 
  16.             return true
  17.         return false
  18.     } 

時間復雜度

需要遍歷字符串,所以時間復雜度為 O(n)

空間復雜度

棧的字符數(shù)量最大為n,Map數(shù)量為3,所以空間復雜度就是O(n)

參考

https://time.geekbang.org/column/article/41222

本文轉(zhuǎn)載自微信公眾號「碼上積木」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系碼上積木公眾號。

 

責任編輯:武曉燕 來源: 碼上積木
相關(guān)推薦

2022-01-19 09:01:28

字符串LeetCode

2010-08-23 10:04:48

CSS浮動

2010-03-23 16:41:17

云計算

2010-09-10 13:24:21

DIV表格

2021-10-19 10:18:56

欺詐管理技術(shù)前線初創(chuàng)公司

2021-08-30 14:34:10

有效算法字符

2010-07-23 16:10:34

Perl用戶函數(shù)

2010-05-25 14:42:58

刪除SVN版本信息

2010-07-06 11:44:49

UML活動圖

2015-03-16 11:16:59

生物識別身份驗證數(shù)據(jù)中心

2015-03-03 09:13:22

2010-07-19 15:07:23

SQL Server評

2010-05-12 16:25:07

Subversion入

2010-07-29 10:09:09

Flex數(shù)據(jù)庫

2010-08-06 09:28:53

Flex頁面跳轉(zhuǎn)

2010-08-30 11:22:24

DIVCSS

2010-11-25 10:42:34

上網(wǎng)行為管理產(chǎn)品網(wǎng)康

2010-08-26 09:27:07

CSS居中

2009-07-25 17:24:25

VMware服務(wù)器虛擬機

2010-09-25 10:06:40

jvm.cfg
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 久草福利 | 亚洲精品99999 | 天天天天天天操 | 日韩中文字幕区 | 亚州激情| 丁香婷婷成人 | 精品日韩一区 | 欧美jizzhd精品欧美巨大免费 | 欧美精品91| 一区二区在线 | 91日韩| 暴草美女 | 欧美韩一区二区 | 欧美在线一区二区三区 | 天堂三级 | 久干网| 欧美精品一区二区三区在线 | 精品视频一区二区 | 99精品久久 | 精品国产一区二区三区免费 | 免费一二区 | 超碰在线人人干 | 在线观看中文字幕 | 国产ts人妖系列高潮 | 91av精品 | 国产成人免费视频网站视频社区 | 中国一级大毛片 | 欧洲免费毛片 | 999国产视频 | 亚洲午夜精品一区二区三区他趣 | 精品一区二区三区av | 亚洲日日 | 在线一级片 | 久久国产精品免费一区二区三区 | jvid精品资源在线观看 | 亚洲精彩视频在线观看 | 91亚洲精品久久久电影 | 国产精品免费一区二区 | 91美女视频| 99久久精品国产一区二区三区 | 色爱区综合 |