20. 有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
/**
* 问题: 没有考虑到先出现反括号的情况
* 没有考虑到全是正括号的现象
*/
public static boolean isValid(String s) {
if (s.length() %2 != 0){
return false;
}
HashMap<Character, Integer> map = new HashMap<>();
Stack<Character> stack = new Stack<>();
map.put('(',1);
map.put('[',2);
map.put('{',3);
map.put(')',-1);
map.put(']',-2);
map.put('}',-3);
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
Integer v = map.get(c);
if (v > 0){
stack.push(c);
}else {
if (stack.empty())
return false;
Character pop = stack.pop();
if (map.get(pop) + v != 0){
return false;
}
}
}
if (!stack.empty())
return false;
return true;
}