利用哈希表的键值对属性和堆的先进后出属性,
先将括号建立键值对,然后迭代时遇到键值对内元素
则弹出,否则继续压入堆内。迭代完毕后,若堆内不为空则无效,反之则有效。
时间O(n),空间O(n)(本题的map内键值对是固定的3组,所以空间是固定的,可以忽略不计)
public boolean isValid(String s) { HashMap<Character,Character> map = new HashMap<Character,Character>(); map.put('}','{'); map.put(']','['); map.put(')','('); Deque<Character> stack = new LinkedList<Character>(); for (int i=0;i<s.length();i++){ if (map.containsKey(s.charAt(i)) && map.get(s.charAt(i)).equals(stack.peek())){ stack.pop(); }else { stack.push(s.charAt(i)); } } return stack.isEmpty(); }