20. 有效的括号
给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
class Solution {public boolean isValid(String s) {int n = s.length();if (n % 2 == 1) { //判断括号个数是否满足偶数个return false;}Map<Character, Character> pairs = new HashMap<Character, Character>() {{put(')', '(');put(']', '[');put('}', '{'); //用键值对的形式存储三种括号,右括号为key 左为value}};Deque<Character> stack = new LinkedList<Character>(); //栈for (int i = 0; i < n; i++) {char ch = s.charAt(i); //循环取出字符串中的每一个元素if (pairs.containsKey(ch)) { //碰到右括号,找key对应的valueif (stack.isEmpty() || stack.peek() != pairs.get(ch)) {//取栈顶元素,但不出 找键值对里面包不包括return false;}stack.pop(); //能匹配就出栈} else {stack.push(ch); //遇到左括号进栈}}return stack.isEmpty(); //看最后是否为空}}
- 先判断边界条件(成对的括号是否满足偶数个)
- 把题目里面出现的括号存在一个hashmap里面,key是右括号,value是左
- 循环遍历字符串中的元素,左括号进栈,右括号判断
- 看最后是否为空
