给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
private final static Map<Character,Character> map = new HashMap(){{
put('{','}');
put('[',']');
put('(',')');
put('?','?');
}};
public static boolean isValid(String s) {
// 简单校验
if(s.length() ==0 || s.length()%2 == 1){
return false;
}
// 存储临时值
LinkedList linkedList = new LinkedList();
linkedList.add('?');
// 遍历值
// 1、如果map的key包含字符,说明是相对的第一个字符
// 2、如果map的key不包含的话,比较value值是不是跟当前字符一致 一致则抵消调
// 3、最后判断list中剩余的值是不是只有1个 如果只有1个说明在循环中,值都被抵消了,返回true,否则返回false
for(int i=0;i<s.length();i++){
if(map.containsKey(s.charAt(i))){
linkedList.addLast(s.charAt(i));
}else{
if(map.get(linkedList.removeLast()) != s.charAt(i) ){
return false;
}
}
}
return linkedList.size() == 1;
}
}