括号匹配
题意
由于只包含字符的字符串’(’,’)’,’{’,’}’,’[‘和’]’,确定输入字符串是有效的。
如果输入字符串有效:
必须使用相同类型的括号关闭左括号。
必须以正确的顺序关闭打开括号。
请注意,空字符串也被视为有效。
思路
括号匹配左括号和右括号匹配使用一个HashMap存储键值对和Stack判断。
直接看代码吧。
解析
/**
* 判断括号是否有效
* @param s
* @return
*/
public boolean isValid(String s) {
if (s == null || s.equals("")) {
return true;
}
HashMap<Character, Character> map = new HashMap<>();
Stack<Character> stack = new Stack<>();
map.put('(', ')');
map.put('[', ']');
map.put('{', '}');
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
//判断是否为左括号
if (map.containsKey(c)) {
stack.push(c);
}else {
//如果不是左括号那就是右括号 开始匹配
boolean empty = stack.isEmpty();
if (empty) return false;
//取出栈顶的元素 跟下一个char比较
Character pop = stack.pop();
if (map.get(pop)!=c) return false;
}
}
return stack.isEmpty();
}
如有偏颇,欢迎指正。