20. [栈]有效的括号
20. 有效的括号
本题使用一个栈,在遍历过程中存放左括号;再使用一个哈希表,将左括号与右括号构成键值对,这样可以简化左括号出栈的判断逻辑。然后使用一个循环遍历s,如果为左括号则入栈,如果在栈不为空的情况下,前一个左括号的所对的右括号就是当前遍历的右括号,则允许出栈,否则可直接返回false,因为没有任何一个括号能消除右括号,不构成有效括号。
// 执行用时: 2 ms , 在所有 Java 提交中击败了 77.81% 的用户
// 内存消耗: 37.2 MB , 在所有 Java 提交中击败了 13.83% 的用户
class Solution {
public boolean isValid(String s) {
if(s.equals("")){
return true;
}
HashMap<Character, Character> hashMap = new HashMap<>();
hashMap.put('(',')');
hashMap.put('[',']');
hashMap.put('{','}');
LinkedList<Character> stack = new LinkedList<>();
for(int i = 0; i < s.length(); i++){
char c = s.charAt(i);
if (hashMap.containsKey(c)){
stack.offer(c);
} else if (!stack.isEmpty() && hashMap.get(stack.peekLast()) == c){
stack.pollLast();
} else {
return false;
}
}
return stack.isEmpty();
}
}

浙公网安备 33010602011771号