解法一:使用栈
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()