解法一:使用栈
java">class Solution {public boolean isValid(String s) {int n = s.length();if(n%2!=0){return false;}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()