栈-E20-有效的括号
2019-03-25 本文已影响0人
三次元蚂蚁
题目
- 概述:给你一个只包含括号的字符串,判断该字符串中括号是否正确闭合,正确闭合的条件如下:
- 左括号必须与相同类型的右括号闭合
- 所有括号都按正确的顺序闭合
- 空字符串也算正确闭合
-
输入:只包含括号的字符串
-
输入子项:'(','{','[',')','}',']'
-
输出:正确闭合为true,反之false
思路
- 由于每次判断是否闭合都要看前面的一个括号,可以考虑用栈来实现
- 如果输入类型是左括号类型则直接入栈
- 如果输入类型是右括号则看栈顶元素是否是相同类型的左括号,若是则将左括号出栈,反之就是错误闭合
注意:若栈中没有元素也是错误闭合
- 最后看栈中是否有多余的元素,如果有则错误闭合,反之则正确闭合
代码
class Solution {
public boolean isValid(String s) {
LinkedList<Character> stack = new LinkedList<>();
Map<Character, Character> map = new HashMap<>();
map.put('(', ')');
map.put('[', ']');
map.put('{', '}');
for (char c : s.toCharArray()) {
switch (c) {
case '(':
case '{':
case '[':
stack.push(c);
break;
case ')':
case '}':
case ']':
if (stack.isEmpty()) {
return false;
}
if (map.get(stack.peek()) != c) {
return false;
} else {
stack.pop();
}
break;
}
}
return stack.isEmpty();
}
}