L20 有效的括号
class Solution {
public boolean isValid(String s) {
//记录字符串长度
int n =s.length();
//如果长度是奇数,直接返回false
if(n%2 == 1){
return false;
}
//定义一个字典,hashMap,右括号为key,做括号为value
Map<Character,Character> pairs = new HashMap<Character,Character>(){{
put(')','(');
put(']','[');
put('}','{');
}};
//定义一个栈 java中的栈用 LinkedList,类型Deque
Deque<Character> stack = new LinkedList<Character>();
// 循环遍历字符串
for(int i =0;i<n;i++){
//获取字符串
char ch = s.charAt(i);
//如果是右括号,就进入匹配判断
if(pairs.containsKey(ch)){
//如果是右括号,判断stack的顶部是不是对应的左括号(key的value),
if(stack.isEmpty() || stack.peek() != pairs.get(ch)){
return false;
}
//如果是,就弹出顶部元素
stack.pop();
}
//不是右括号就是左括号,将左括号加入stack中
else{
stack.push(ch);
}
}
//最后判断stack是否为空
return stack.isEmpty();
}
}
ps:
新建字典的方法,类型是Map, new HashMap ,两层{}
//定义一个字典,hashMap,右括号为key,做括号为value
Map<Character,Character> map = new HashMap<Character,Character>(){{
put(')','(');
put(']','[');
put('{','}');
}
};
判断是不是字典的key的方法
map.containsKey(ch)
字符的类型:Character