1.思路:
实现括号匹配,最简单的方法就是利用栈实现。分别将三种括号保存到map中,map.put(右括号, 左括号)。如果需要判断的字符串长度为奇数,则不匹配。
对于当前将要判断的字符ch,you
if ch是右括号,判断栈是否为空,若为空则不匹配。若栈不为空,判断栈是否顶元素与c不h匹配,也就是map.containsKey(ch) != stack.peek()。
if ch是左括号,则将其压入栈中。
最后返回stack.isEmpty()即可。
2.代码
class Solution {
public boolean isValid(String s) {
int n = s.length();
if(n % 2 == 1)return false;
Map<Character, Character> pairs = new HashMap<Character, Character>(){{
put(')', '(');
put('}', '{');
put(']', '[');
}};
Deque stack = new LinkedList<Character>();
for(int i = 0;i < n; i++){
char ch = s.charAt(i);
//如果ch是三种右括号中的一种,则判断是否与栈顶元素匹配
if(pairs.containsKey(ch)){
//如果栈为空或者栈顶括号与ch匹配
if(stack.isEmpty() || stack.peek() != pairs.get(ch))return false;
stack.pop();
//如果ch不是右括号
}else{
stack.push(ch);
}
}
return stack.isEmpty();
}
}