首页 > 其他分享 >LeetCode 20.有效的括号(简单)

LeetCode 20.有效的括号(简单)

时间:2022-11-25 13:37:32浏览次数:55  
标签:字符 20 压入 示例 stack 括号 字符串 LeetCode

题目描述:

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

有效字符串需满足:

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

示例 1:

输入:s = "()"
输出:true

示例 2:

输入:s = "()[]{}"
输出:true

示例 3:

输入:s = "(]"
输出:false

示例 4:

输入:s = "([)]"
输出:false

示例 5:

输入:s = "{[]}"
输出:true

提示:

  • 1 <= s.length <=
  • ​s​​​ 仅由括号 ​​'()[]{}'​​ 组成

题目分析:

这道有效括号匹配就是典型的使用栈来解决的问题,当然解决这道题有不同的写法,下面是其中一种。我们遍历整个字符串,获取字符串中的字符,如果是左括号,我们就把相应的右括号压入栈中,如果遇到右括号,则检查其是否与栈顶的括号相同,不同则说明出现了不匹配的括号;否则我们把栈顶的括号弹出,即移除匹配的括号对。当遇到右括号时,检查栈发现它已经空了,则说明当前右括号没有匹配的左括号,说明出现括号无效的情况,直接返回 ​​false​​ 。当遍历完整个字符串,且栈为空时,说明这是个有效的括号字符串。

题解:

执行用时: 1 ms

内存消耗: 36.9 MB

class Solution {
public boolean isValid(String s) {
// 将 LinkedList 当作栈使用
LinkedList<Character> stack = new LinkedList<>();
// 遍历字符串中的每个字符
for (char c : s.toCharArray()) {
if (c == '[') {
// 字符为 [ 时,压入 ]
stack.push(']');
} else if (c == '(') {
// 字符为 ( 时,压入 )
stack.push(')');
} else if (c == '{') {
// 字符为 { 时,压入 }
stack.push('}');
} else if (stack.isEmpty() || c != stack.pop()) {
// 当遇到右括号时,检查栈发现它已经空了
// 则说明当前右括号没有匹配的左括号
// 或者当前字符与栈顶元素不同
// 则说明出现了字符串括号不匹配
return false;
}
}
// 当遍历完字符串栈为空则说明括号有效
return stack.isEmpty();
}
}

题目来源:力扣(LeetCode)




标签:字符,20,压入,示例,stack,括号,字符串,LeetCode
From: https://blog.51cto.com/u_15891283/5886562

相关文章

  • LeetCode 155.最小栈(简单)
    题目描述:设计一个支持​​push​​​,​​pop​​​,​​top​​操作,并能在常数时间内检索到最小元素的栈。​​push(x)​​——将元素x推入栈中。​​pop()​​ —......
  • LeetCode 769.最多能完成排序的块(中等)
    题目描述:数组​​arr​​​是​​[0,1,...,arr.length-1]​​的一种排列,我们将这个数组分割成几个“块”,并将这些块分别进行排序。之后再连接起来,使得连接的结果......
  • LeetCode 240.搜索二维矩阵II(中等)
    题目描述:编写一个高效的算法来搜索 ​​m x n​​​ 矩阵​​matrix​​​中的一个目标值​​target​​。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的......
  • LeetCode 232.用栈实现队列(简单)
    题目描述:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(​​push​​​、​​pop​​​、​​peek​​​、​​empty​​):实现​​MyQueu......
  • LeetCode 448.找到所有数组中消失的数字(简单)
    题目描述:给你一个含​​n​​​个整数的数组​​nums​​​,其中​​nums[i]​​​在区间​​[1,n]​​​内。请你找出所有在​​[1,n]​​​范围内但没有出现......
  • LeetCode 48.旋转图像(中等)
    题目描述:给定一个​​n × n​​​的二维矩阵 ​​matrix​​​表示一个图像。请你将图像顺时针旋转​​90​​度。你必须在原地旋转图像,这意味着你需要直接修改......
  • LeetCode 260.只出现一次的数字III(中等)
    题目描述:给定一个整数数组​​nums​​,其中恰好有两个元素只出现一次,其余所有元素均出现两次。找出只出现一次的那两个元素。你可以按任意顺序返回答案。进阶:你的算法......
  • LeetCode 476.数字的补数(简单)
    题目描述:给你一个正整数​​num​​,输出它的补数。补数是对该数的二进制表示取反。示例1:输入:num=5输出:2解释:5的二进制表示为101(没有前导零位),其补数为010。所以......
  • LeetCode 693.交替位二进制数(简单)
    题目描述:给定一个正整数,检查它的二进制表示是否总是0、1交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。示例1:输入:n=5输出:true解释:5的二进制表示是:101示......
  • LeetCode 268.丢失的数字(简单)
    题目描述:给定一个包含​​[0,n]​​​中​​n​​​个数的数组​​nums​​​,找出​​[0,n]​​这个范围内没有出现在数组中的那个数。进阶:你能否实现线性时间......