020.有效的括号,用栈来解决的 Java 版 LeetCode 刷题笔记
鲁迅说过,龙年来了,再刷几天《二哥的 LeetCode 刷题笔记》,我也要休息了。祝大家新的一年,龙转乾坤、春招顺利、考研上岸!
题意
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
难度
简单
示例
输入:s = "()"
输出:true
输入:s = "()[]{}"
输出:true
输入:s = "(]"
输出:false
输入:s = "([)]"
输出:false
输入:s = "{[]}"
输出:true
分析 1
对于括号的匹配,我们可以利用 栈 这个数据结构来实现。为什么呢?
我们先来看百度百科对栈的定义。
栈(stack)又名堆栈,一种限定仅在表尾进行插入/删除的线性表。一端被称为栈顶,另一端称为栈底。向一个栈插入新元素称作入栈,它会把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素称作出栈,它会把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
我之前在《二哥的 Java 进阶之路》中也有详细讲过栈这个数据结构,如果你对栈还不是很了解的话,可以回头再看一下。
然后我们来分析这道题。
要判断当前这个右括号是否跟它未匹配过的最近的左括号相匹配,我们可以先把这个左括号压入栈中,匹配成功后再把这个括号从栈中弹出。
来看题解,也很简单:
class Solution {
public boolean isValid(String s) {
// 创建一个栈来存放括号
Stack<Character> stack = new Stack<>();
// 遍历字符串中的每个字符
for (char c : s.toCharArray()) {
// 如果是开括号,压入栈中
if (c == '(' || c == '[' || c == '{') {
stack.push(c);
} else {
// 如果是闭括号,检查栈是否为空,以及栈顶元素是否与之匹配
if (stack.isE
真诚点赞 诚不我欺
回复