class Solution {
public boolean isValid(String s) {
int n = s.length();
//如果s的长度是奇数,那么括号肯定不能两两匹配,无效,false
if(n%2 == 1){
return false;
}
//申明一个hash表
//Character C大写
Map<Character, Character> pairs = new HashMap<Character, Character>(){{
put(')','(');
put(']','[');
put('}','{');
}};
//Deque是一个双端队列(Double Ended Queue)
//Deque是一个接口,它的实现类有ArrayDeque和LinkedList。
//Deque<String> deque = new LinkedList<>();
//把Deque作为Stack使用时,注意只调用push()/pop()/peek()方法,不要调用addFirst()/ removeFirst()/peekFirst()方法,这样代码更加清晰。
Deque<Character> stack = new LinkedList<Character>();
//int i 的int不要忘
for(int i = 0; i < n; i++){
char ch = s.charAt(i); //把s的index对应i的值赋给ch
if(pairs.containsKey(ch)){ //hash表是否包括key,也就是右括号
//即将匹配的是一个右括号,看一下栈里是不是空,如果是空,那么说明s里只有一个右括号,无效
//如果栈里不为空,有括号,那么要判断是不是个这个右括号匹配,不匹配,无效
if(stack.isEmpty() || stack.peek() != pairs.get(ch)){
return false;
//如果是匹配的,那么右括号也不进栈,然后将这个左括号pop出栈
}
else{
stack.pop();
}
}
//如果hash表不包括这个key,也就是不是key,不是右括号,那么就是左括号
//左括号要进栈,push进栈
else{
stack.push(ch);
}
}
//最后遍历完成,看一下栈里是不是空,如果是空,说明全部匹配完成,有效,返回ture,如果不为空,说明有没有被匹配上的,就是无效,返回false
return stack.isEmpty();
}
}
leetcode hot100------20. 有效的括号
最新推荐文章于 2024-07-14 02:25:25 发布