LeetCode20-有效的括号

题目链接

英文链接:https://leetcode.com/problems/valid-parentheses/

中文链接:https://leetcode-cn.com/problems/valid-parentheses/

题目详述

给定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例 1:

1
2
输入: "()"
输出: true

示例 2:

1
2
输入: "()[]{}"
输出: true

示例 3:

1
2
输入: "(]"
输出: false

示例 4:

1
2
输入: "([)]"
输出: false

示例 5:

1
2
输入: "{[]}"
输出: true

题目详解

判断是否是有效的括号序列。括号匹配是典型的运用栈解决的问题。

  • 遍历字符串的每个字符。
  • 如果是左括号,入栈。
  • 如果是右括号,首先检查栈是否为空,为空返回 false;若不为空,弹出栈顶元素并比较是否匹配,不匹配返回 false。
  • 当遍历完字符串序列后,栈为空说明为有效的括号序列,否则说明不是有效的括号序列。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class LeetCode_00020 {

public boolean isValid(String s) {
Map<Character, Character> map = new HashMap<>();
map.put(')', '(');
map.put(']', '[');
map.put('}', '{');
Deque<Character> stack = new ArrayDeque<>();
for (char c : s.toCharArray()) {
if (map.containsKey(c)) {
if (stack.isEmpty() || stack.pop() != map.get(c)){
return false;
}
} else {
stack.push(c);
}
}
return stack.isEmpty();
}
}