1. 程式人生 > 實用技巧 >20 有效的括號

20 有效的括號

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

有效字串需滿足:

左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。

示例 1:

輸入: "()"
輸出: true

示例 2:

輸入: "()[]{}"
輸出: true

示例 3:

輸入: "(]"
輸出: false

示例 4:

輸入: "([)]"
輸出: false

示例 5:

輸入: "{[]}"
輸出: true

左括號後續一旦是錯誤的右括號或者沒有後續的時候,字串便無效。使用棧儲存字元,讀到左括號便存在棧中,讀到右括號就判斷前面的符號是否是合適的左括號,如果不是字串便無效,如果是的便將左括號出棧。最後判斷是否所有左括號都出棧即匹配完成。時間複雜度 \(O(n)\)

,空間複雜度 \(O(n)\)

    public boolean isValid(String s) {
        char[] chars = s.toCharArray();
        Stack<Character> stack = new Stack<>();
        for (char c : chars) {
            if (c == '(' || c == '{' || c == '[') {
                stack.push(c);
            } else {
                int size = stack.size();
                if (size == 0) {
                    return false;
                }
                Character top = stack.peek();
                if ((c == ')' && top != '(') || (c == '}' && top != '{') || (c == ']' && top != '[')) {
                    return false;
            	}
                stack.pop();
            }
        }
        if (stack.size() != 0){
            return false;
        }
        return true;
    }