给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
public boolean isValid(String s) {
//存储匹配对应关系
Map<Character, Character> map = new HashMap<Character, Character>();
map.put(')','(');
map.put('}','{');
map.put(']','[');
// 构造一个栈存储
List<Character> list = new ArrayList<Character>();
for (char ss : s.toCharArray()) {
if (ss=='(' || ss=='{' || ss=='[' ) {
//入栈
list.add(ss);
} else {
//先判断是否为空,再取size=1,防止下标越界
if ( list.isEmpty() || list.get(list.size()-1) != map.get(ss) ){
return false;
}
//出栈
list.remove(list.size()-1);
}
}
return list.isEmpty();
}