解法一:使用栈
java
复制代码
class Solution {
public boolean isValid(String s) {
int n = s.length();
if(n%2!=0){
return false;
}
// 定义map,便于查找对应的括号
Map<Character, Character> map = new HashMap<>();
map.put(')','(');
map.put(']','[');
map.put('}','{');
// 利用栈帮助判断
Deque<Character> stack = new LinkedList<>();
for(int i=0; i<n; i++){
char ch = s.charAt(i);
if(map.containsKey(ch)){
// 是左括号
if(stack.isEmpty() || stack.peek() != map.get(ch)){
return false;
}
stack.pop();
}else{
stack.push(ch);
}
}
return stack.isEmpty();
}
}
注意:
map不能LinkedMap,只能HashMap。
List的实现:ArrayList、LinkedList 、 Vector
Set的实现:HashSet、LinkedHashSet、TreeSet
Map的实现:HashMap、LinkedHashMap、TreeMap
Queue的实现:LinkedList、ArrayDeque、PriorityQueue
Stack的实现:LinkedList、ArrayDeque
- 申请栈:
- Deque<Character> stack = new LinkedList<>();
Deque<Character> stack = new ArrayDeque<>();
- 申请队列:
Queue<Character> queue = new LinkedList<>();
Quque<Character> stack = new ArrayDeque<>();
LinkedList和ArrayDeque的区别:
- 操作:
ArrayDeque:add() remove()
LinkedList:offer() poll() peek()