leetcode链接:
https://leetcode.cn/problems/valid-parentheses/
题目分析

使用 栈 作为中间存储数据的方式,原因,极有可能存在多种括号层层封装的情况,例如 {[()]()[{}]}
,此情况理应返回 true。

方案一
Java switch case 语句
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| class Solution { public boolean isValid(String s) {
Deque deque = new LinkedList<Integer>();
for (int i = 0; i < s.length(); i++) { switch (s.charAt(i)){ case '{' : deque.push(1); break; case '[' : deque.push(2); break; case '(' : deque.push(3); break; case '}' : if (!deque.isEmpty() && ((Integer) deque.peek()) == 1) { deque.poll(); } else { return false; } break; case ']' : if (!deque.isEmpty() && ((Integer) deque.peek()) == 2) { deque.poll(); } else { return false; } break; case ')' : if (!deque.isEmpty() && ((Integer) deque.peek()) == 3) { deque.poll(); } else { return false; } break; } } return deque.isEmpty(); } }
|
结果
解答成功:
执行耗时:1 ms,击败了97.73% 的Java用户
内存消耗:39.3 MB,击败了94.01% 的Java用户
分析
时间复杂度:
O( n )
空间复杂度:
O( n )
官方题解
https://leetcode.cn/problems/valid-parentheses/solution/you-xiao-de-gua-hao-by-leetcode-solution/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| class Solution { public boolean isValid(String s) { int n = s.length(); if (n % 2 == 1) { return false; }
Map<Character, Character> pairs = new HashMap<Character, Character>() {{ put(')', '('); put(']', '['); put('}', '{'); }}; Deque<Character> stack = new LinkedList<Character>(); for (int i = 0; i < n; i++) { char ch = s.charAt(i); if (pairs.containsKey(ch)) { if (stack.isEmpty() || stack.peek() != pairs.get(ch)) { return false; } stack.pop(); } else { stack.push(ch); } } return stack.isEmpty(); } }
作者:LeetCode-Solution 链接:https: 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
|