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

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

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

[[384434]]

前言

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

理解棧

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

先進者后出、后進者先出,這就是棧結構。

實際應用

那么棧在實際應用中有什么場景呢?

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

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

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

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

 

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

 

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

 

Java中的棧類

在Java中,棧的對應類為Stack。

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

算法題

還是老樣子,來一題棧相關的算法題。

題目

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

有效字符串需滿足:

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

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

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

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

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

解法

解法就是利用棧了。

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

關于左括號和右括號的對應關系,可以用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.     } 

也有比較靈活的辦法,就是入棧的時候就確定好括號的對應關系,直接入棧左括號對應的右括號。

  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)

空間復雜度

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

參考

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

本文轉載自微信公眾號「碼上積木」,可以通過以下二維碼關注。轉載本文請聯系碼上積木公眾號。

 

責任編輯:武曉燕 來源: 碼上積木
相關推薦

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

欺詐管理技術前線初創公司

2010-07-23 16:10:34

Perl用戶函數

2010-05-25 14:42:58

刪除SVN版本信息

2021-08-30 14:34:10

有效算法字符

2010-07-06 11:44:49

UML活動圖

2015-03-16 11:16:59

生物識別身份驗證數據中心

2010-07-19 15:07:23

SQL Server評

2015-03-03 09:13:22

2010-05-12 16:25:07

Subversion入

2010-07-29 10:09:09

Flex數據庫

2010-08-06 09:28:53

Flex頁面跳轉

2010-08-30 11:22:24

DIVCSS

2010-11-25 10:42:34

上網行為管理產品網康

2010-08-26 09:27:07

CSS居中

2010-09-25 10:06:40

jvm.cfg

2010-07-06 13:11:50

Visio畫UML圖
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美精品久久久久久久久久 | 91一区二区三区 | 男女羞羞免费视频 | 亚洲日韩欧美一区二区在线 | 国产成人免费视频网站高清观看视频 | www.黄色片视频 | 国产超碰人人爽人人做人人爱 | 欧美在线二区 | 欧美三级久久久 | 亚洲视频区 | 国产成人精品一区二区三区四区 | 国产精品人人做人人爽 | 精品久久久久久久久久久下田 | 精品久久久久久亚洲综合网 | 精品国产乱码久久久久久老虎 | 成人午夜影院 | av一区二区三区四区 | 久久久噜噜噜www成人网 | 国产超碰人人爽人人做人人爱 | 成人aaa视频| 北条麻妃一区二区三区在线视频 | 亚洲 中文 欧美 日韩 在线观看 | 精品国产伦一区二区三区观看方式 | 国内精品免费久久久久软件老师 | 亚洲高清在线 | h在线观看| 国产精品久久久久久久久久 | 久久国产精品一区二区三区 | 欧美乱大交xxxxx另类电影 | 国产一二三区免费视频 | 国产综合在线视频 | 一级做a爰片久久毛片 | 日韩中文字幕视频在线 | 国产欧美二区 | 99爱视频 | 欧美狠狠操 | 欧美一区二区在线播放 | 五月天国产视频 | 亚洲一区在线免费观看 | 午夜网| 亚洲精品欧美 |