[Oracle]跨DBLINK的JOIN查詢的資料庫快取問題15783452141
阿新 • • 發佈:2022-03-03
20. 有效的括號
Solution
思路:左邊入棧,遇到右邊判斷即可,最後看堆疊是否為空。
class Solution { public boolean isValid(String s) { Stack<Character> stack = new Stack<>(); char[] str = s.toCharArray(); int len = s.length(); for (int i = 0; i < len; i++) { if (str[i] == '(' || str[i] == '[' || str[i] == '{') { stack.push(str[i]); } else { if (stack.empty()) return false; char ch = stack.peek(); if (str[i] == ')') { if (ch != '(') return false; } else if (str[i] == ']') { if (ch != '[') return false; } else { if (ch != '{') return false; } stack.pop(); } } if (stack.empty()) return true; else return false; } }
不過Stack
類不推薦使用,可以使用Deque
實現類ArrayDeque
和LinkedList
的區別:
ArrayDeque
陣列實現,隨機存取效率高,佇列、棧的效率好一點,迴圈陣列的刪除不涉及元素的移動
LinkedList
插入、刪除的優勢更大
class Solution { public boolean isValid(String s) { Map<Character, Character> map = new HashMap<>(); map.put(')', '('); map.put(']', '['); map.put('}', '{'); Deque<Character> deque = new ArrayDeque<>(); int len = s.length(); for (int i = 0; i < len; i++) { char c = s.charAt(i); if (map.containsKey(c)) { if (deque.size() == 0 || deque.peek() != map.get(c)) { return false; } deque.pop(); } else { deque.push(c); } } if (deque.size() == 0) { return true; } else { return false; } } }