开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第32天,点击查看活动详情
1.描述
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
提示:
- 1 <= s.length <= 10^4
- s 仅由括号 '()[]{}' 组成
2.分析
对这道题 我们先观察题目规律
- 遇到左括号就入栈
- 遇到右括号就出栈,将出栈的 与现在的右括号在键值对中对应的括号作比较 若不相等就说明不是有效字符串 相等则继续比较
注意 :
- 若栈空了使用pop出栈会报错!
- 若经过以上遍历之后 栈里还有元素 则同样说明不是有效字符串
3.AC代码
class Solution {
public boolean isValid(String s) {
Map<Character, Character> map = new HashMap<Character, Character>();
map.put(')', '(');
map.put(']', '[');
map.put('}', '{');
Stack<Character> st = new Stack<>();
char[] a = s.toCharArray();
if (a.length%2!=0) {
return false;
}
for (char c : a) {
if(c=='('||c=='['||c=='{') {
st.push(c);
}else {
if(st.empty()) {
return false;
}
if(st.pop()!=map.get(c)) {
return false;
}
}
}
if(!st.empty()) {
return false;
}else {
return true;
}
}
}
4.总结
这个其实就是栈的实现的过程,如果理解栈的话,那很容易的就能解答出本题,如果不会也没事,看看题解区的大佬的思路,还有很多的动画教程,非常的象形生动。
这个大佬的动画很详细,可以学习学习。有效的括号(辅助栈法,极简+图解)
参考
逐步分析,图解栈(栈是最标准的解法,大家不要争了) - 有效的括号 - 力扣(LeetCode) (leetcode-cn.com)
[小白]Python3 《有效的括号》(ascii码操作) - 有效的括号 - 力扣(LeetCode) (leetcode-cn.com)