使用栈,遇到右括号就出栈,遇到左括号就进栈。最后,判断栈是否为空,从而返回相应结果。
以左括号为值,右括号为键进行存储到map中,方便判断遇到的是哪个括号,以及是该括号的左半部分还是右半部分。由此,确定左右括号的办法,就是与map中存储的值键进行比对。
遇到右括号,且左括号与之匹配,则将左括号出栈;反之,返回false。
import java.util.*; public class Solution { /** * * @param s string字符串 * @return bool布尔型 */ public boolean isValid (String s) { // 使用栈,遇到右括号就出栈,遇到左括号就进栈 Map<Character, Character> map = new HashMap<>(); map.put(']', '['); map.put('}', '{'); map.put(')', '('); Deque<Character> stack = new ArrayDeque<>(); for (int i = 0; i < s.length(); ++i) { Character ch = s.charAt(i); if (map.containsKey(ch)) { // 避免全右 // 如果遇到右括号时,栈内没有元素,说明没有左括号,返回false if (stack.isEmpty()) { return false; } else if (map.get(ch).equals(stack.peekFirst())) { stack.removeFirst(); } else { return false; } } else { stack.addFirst(ch); } } // 避免全左 return stack.isEmpty(); } }