力扣 - 20. 有效的括號
阿新 • • 發佈:2020-12-10
目錄
題目
思路(輔助棧)
- 用棧後進先出(LIFO)將符號入棧
- 再利用HashMap儲存符號對
- 由於都是這些符號,所以對每一個符號進行判斷,如果左括號直接入棧,右括號再進行判斷是否符合
程式碼
class Solution { public boolean isValid(String s) { if (s.length() == 0) { return true; } Deque<Character> stack = new LinkedList<>(); HashMap<Character, Character> symbolMap = new HashMap<>(); symbolMap.put(')', '('); symbolMap.put('}', '{'); symbolMap.put(']', '['); // 遍歷字串 for (int i = 0; i < s.length(); i++) { char ch = s.charAt(i); // 字元為右半部分 if (symbolMap.get(ch) != null) { // 如果棧是空,但是當前字元ch又是右半部分,則直接為false // 或者如果左右符號不匹配,也返回false if(stack.isEmpty() || stack.pop() != symbolMap.get(ch)) { return false; } } else { // 左括號直接入棧 stack.push(ch); } } // 棧stack為空說明括號有效,返回true return stack.isEmpty(); } }
複雜度分析
- 時間複雜度:\(O(N)\),其中 N 為字串長度
- 空間複雜度:\(O(N)\),其中 N 為字串長度