判断一个只包含三种括号的字符串是否符合括号规范。
如果括号顺序是正确的,那么用栈来保存括号,碰到左括号时入栈,碰到右括号时出栈,则遍历完成之后栈是空的。
是否正确不仅与括号的数量有关,还与括号的位置有关.
map中key是)而value是(的原因是这样可以在碰到)的时候方便的判断它是否为对应的括号。
class Solution {
public boolean isValid(String s) {
if(s.length()%2==1)return false;
Map<Character,Character> map=new HashMap<>();
map.put(')','(');
map.put('}','{');
map.put(']','[');
Stack<Character> stack=new Stack<>();
for(int i=0;i<s.length();i++){
if(map.containsValue(s.charAt(i))){
stack.push(s.charAt(i));
}else if(map.containsKey(s.charAt(i))){
if(stack.isEmpty() || stack.peek()!=map.get(s.charAt(i)))return false;
stack.pop();
}else{
return false;
}
}
return stack.size()==0;
}
}