資料結構——使用Java棧實現【括號匹配】
阿新 • • 發佈:2018-12-12
給定一個只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字串,判斷字串是否有效。
有效字串需滿足:
- 左括號必須用相同型別的右括號閉合。
- 左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。
參考leetcode.com或leetcode-cn.com 第20題 有效的括號
實現思路:
{ [ ( ) ] }
1、依次遍歷字串,只要是{ [ ( 都把它壓入棧中
2、如果是 ) ] } 則先後判斷棧頂元素是否為( ,如果是則匹配成功,棧頂中 ( 出棧,不是則返回false,不匹配
3、判斷棧頂元素是否為 ] ,如果是則匹配成功,棧頂中 [ 出棧
4、判斷棧頂元素是否為 } ,如果是則匹配成功,棧頂中 { 出棧
5、判斷棧中是否還存在元素,如果不存在則表示之前已經全部匹配出棧,如果還存在則表示部分未匹配,判斷依據,stack.isEmpty()。
即 棧頂元素反映了在巢狀的層次關係中,最近的需要匹配的元素。
具體程式碼實現:
package cn.itcats.stack; import java.util.Stack; public class Solution { public boolean isValid(String s) { //1、申明一個stack Stack<Character> stack = new Stack<Character>(); //遍歷s String本質上是char[] for(int i = 0 ; i < s.length() ; i++){ char c = s.charAt(i); if(c == '{' || c == '[' || c=='('){ //如果是{ [ ( 壓入棧中 stack.push(c); }else{ // } ] ) 進行比對 if(stack.isEmpty()){ return false; } char topChar = stack.pop(); if(c == ']' && topChar != '['){ return false; } if(c == '}' && topChar != '{'){ return false; } if(c == ')' && topChar != '('){ return false; } } } //如果迴圈結束,棧中沒有元素則表示全部匹配成功 return stack.isEmpty(); } }