题目
leetCode 第 20 题,有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
提示:
1 <= s.length <= 104
s 仅由括号 '()[]{}' 组成
做题时间
class Solution {
public boolean isValid(String s) {
}
}
以上给出方法输入参数,完成作答。
题目分析
- 题目叫做有效括号,其实就是我们日常的括号使用规则
- 看到题目第一时间就想到了用到栈这种数据结构,方便操作
- 使用栈进行括号的操作,左括号入栈,右括号出栈
解答分析
本文只分析本人做题思路,仅供参考,了解一种解题思想,其他各种做题思路请上网查阅。
解答成功:
执行耗时:2 ms,击败了75.29% 的Java用户
内存消耗:36.7 MB,击败了29.63% 的Java用户
class Solution {
public boolean isValid(String s) {
Stack<String> stack = new Stack<>();
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (!getRight(chars[i]).equals("no")) {//左括号 入栈
stack.push(getRight(chars[i]));
} else {//右括号 出栈
if (stack.isEmpty()){
return false;
}else {
String pop = stack.pop();
if (!String.valueOf(chars[i]).equals(pop)) {
return false;
}
}
}
}
//最后不为空也是无效括号
if (stack.isEmpty()) {
return true;
} else {
return false;
}
}
private String getRight(char left) {
switch (left) {
case '(':
return ")";
case '[':
return "]";
case '{':
return "}";
default:
return "no";
}
}
}