给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
1.奇数必错
2.HashMap存 右括号,左括号
3.遇到左括号放入栈,遇到右括号如果栈顶不是对应左括号则错,是则弹栈
4.如果非空说明左括号多了错
class Solution {
public boolean isValid(String s) {
//奇数必错
if(s.length()%2!=0)return false;
char[] cs = s.toCharArray();
int l=cs.length;
Map<Character,Character> map=new HashMap(){{
put(')','(');
put(']','[');
put('}','{');
}
};
Deque<Character> d=new LinkedList();
for(char c:cs){
if(map.containsKey(c)){
if(d.isEmpty()||d.peek()!=map.get(c)){
return false;
}
d.pop();
}
else{
d.push(c);
}
}
return d.isEmpty();
}
}