1. 程式人生 > 其它 >[Oracle]跨DBLINK的JOIN查詢的資料庫快取問題15783452141

[Oracle]跨DBLINK的JOIN查詢的資料庫快取問題15783452141

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

實現類ArrayDequeLinkedList的區別:

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;
        }
    }
}