class Solution {
public boolean isValid(String s) {
HashMap<Character, Character> map = new HashMap<>();
map.put(')', '(');
map.put(']', '[');
map.put('}', '{');
char[] chars = s.toCharArray();
Deque<Character> stack = new LinkedList<>();
for (int i = 0; i < chars.length; i++) {
if(map.containsValue(chars[i])) stack.push(chars[i]);
else if (stack.isEmpty()) return false;
else if (map.get(chars[i]) != stack.pop()) return false;
}
return stack.isEmpty();
}
}
阿里追问:如果“左括号必须以正确的顺序闭合”,这个条件去掉如何实现
直接对左右括号计数
class Solution {
public boolean isValid(String s) {
int l1 = 0, l2 = 0, l3 = 0;
char[] chars = s.toCharArray();
for (int i = 0; i < s.length(); i++) {
if (chars[i] == '(') l1++;
else if (chars[i] == '[') l2++;
else if (chars[i] == '{') l3++;
else if (chars[i] == ')') l1--;
else if (chars[i] == ']') l2--;
else l3--;
if (l1 < 0 || l2 < 0 || l3 < 0) return false;
}
return !(l1 ==0 || l2 == 0 || l3 == 0);
}
}