题目描述:给定一个只包含‘[’,'{','(',')','}',']'的字符串,判断该字符串是否括号有效。
括号有效的要求是:
- 每个左括号都有对应的右括号。
- 每个右括号都有对应的左括号。
- 左括号必须以正确的顺序闭合。
示例 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)