栈与队列练习题
LeetCode链接:20. 有效的括号
1.题目描述
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
示例 4:
输入:s = “([])”
输出:true
提示:
- $1 <= s.length <= 10^4$
s
仅由括号 '()[]{}'
组成
2.题解
2.1 栈与队列-哈希集合
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) { Stack<Character> stack = new Stack<>();
Map<Character, Character> map = new HashMap<>(); map.put('(', ')'); map.put('{', '}'); map.put('[', ']');
for (int i = 0; i < s.length(); i++) { Character c = s.charAt(i);
if (map.containsKey(c)) { stack.push(map.get(c)); } else { if (!stack.isEmpty() && stack.peek() == c) { stack.pop(); } else { return false; } } } return stack.isEmpty(); } }
|
2.2 栈与队列-逻辑判断
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| class Solution { public boolean isValid(String s) { Stack<Character> stack = new Stack<>(); for (int i = 0; i < s.length(); i++) { Character c = s.charAt(i); if (c == '(') { stack.push(')'); } else if (c == '{') { stack.push('}'); } else if (c == '[') { stack.push(']'); } else { if (!stack.isEmpty() && stack.peek() == c) { stack.pop(); } else { return false; } } } return stack.isEmpty(); } }
|