括号匹配
题目大意:给出包括大中小括号随机排列的一个String s,判断是否为左右闭合(左右括号顺序对应)
解题思路:利用栈的特性去解决该问题,需要考虑边界栈空的情况
题解及注释:
class Solution {
// 定义一个hashMap用于匹配括号右边
private static final Map<Character, Character> map = new HashMap<Character, Character>(){{
put('(',')');put('{','}');put('[',']');put('?','?');
}};
public boolean isValid(String s) {
// 如果s为有效String的情况下第一个字符不在map的key值中,这种情况下说明有其他字符,直接返回false
if (s.length() > 0 && !map.containsKey(s.charAt(0))) return false;
// 这里用链表代替栈结构,主要方法为:addLast 最后新增一个节点;removeLast 移除最后一个节点并返回
LinkedList stack = new LinkedList<Character>(){{add('?'); }};
// 遍历该字符串
for(Character c: s.toCharArray()) {
// 当是左边括号的情况,入栈等待右边匹配
// 当是右边括号的情况,将栈道最后一个字符拿出来判断是否与字符c相等,相等即闭合,否则就不符合题目要求
if (map.containsKey(c))stack.addLast(c);
else if (map.get(stack.removeLast()) != c)return false;
}
return stack.size() == 1;
}
}
总结:K神的底子太好了,我看到的第一反应只是折半查找匹配。。。。。坚持记录一下
标签:map,匹配,1121,括号,put,return,stack From: https://www.cnblogs.com/hgao/p/18561704