題目描述:給定一個只包含‘[’,'{','(',')','}',']'的字符串,判斷該字符串是否括號有效。
括號有效的要求是:
- 每個左括號都有對應的右括號。
- 每個右括號都有對應的左括號。
- 左括號必須以正確的順序閉合。
示例 1:
????????輸入:s = "()"
????????輸出:true
示例 2:
????????輸入:s = "()[]{}"
????????輸出:true
示例 3:
????????輸入:s = "(]"
????????輸出:false
示例 4:
????????輸入:s = "([])"
????????輸出:true
示例 5:
????????輸入:s = "([)]"
????????輸出:false
求解思路:
把左括號放入棧中,遇到右括號時,讓右括號和棧頂元素進行匹配。
匹配的過程可以通過map實現。
時間復雜度:O(n)
空間復雜度:O(1)
class Solution {public boolean isValid(String s) {if (s == null || s == "" || s.length() % 2 == 1) { //奇數長度不符合return false;}HashMap<Character, Character> map = new HashMap<>();map.put(')', '(');map.put('}', '{');map.put(']', '[');Deque<Character> stack = new ArrayDeque<>();for (char ch : s.toCharArray()) {if (!stack.isEmpty() && map.containsKey(ch) && stack.peek() == map.get(ch)) {stack.pop(); // 匹配到就彈出棧頂} else {stack.push(ch); //把({[放進棧中}}return stack.isEmpty();}
}
練習地址:20. 有效的括號 - 力扣(LeetCode)