LeetCode 0020.有效的括号【Go】

简介: LeetCode 0020.有效的括号【Go】

有效的括号

LeetCode20. 有效的括号

题目描述

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

有效字符串需满足:

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

示例 1:

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

示例 2:

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

示例 3:

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

示例 4:

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

示例 5:

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

提示:

  • 1 <= s.length <= 10^4
  • s 仅由括号 ()[]{} 组成

思路

题目要求:

  • 给定一个只包括括号的字符串,判断字符串中的括号是否匹配
  • 返回判断结果

由于栈结构的特殊性,非常适合做对称匹配类的题目。

首先要弄清楚,字符串里的括号不匹配有几种情况。

  • 第一种情况,字符串里左方向的括号多余了 ,所以不匹配。
  • 第二种情况,括号没有多余,但是括号的类型没有匹配上。
  • 第三种情况,字符串里右方向的括号多余了,所以不匹配。

代码

Go

func isValid(s string) bool {
  // 用字典事先存好括号的匹配规则
  hashmap := map[byte]byte{
    ')': '(',
    '}': '{',
    ']': '[',
  }
  // 用切片模拟栈
  stack := make([]byte, 0)
  if s == "" {
    // 空串有效
    return true
  }
  // 遍历字符串
  for i := 0; i < len(s); i++ {
    if s[i] == '(' || s[i] == '{' || s[i] == '[' {
      // 遍历字符串时遇到左括号 压栈
      stack = append(stack, s[i])
    } else if len(stack) != 0 && stack[len(stack)-1] == hashmap[s[i]] {
      // 遍历字符串时遇到右括号 栈非空且栈顶元素与该右括号匹配 弹栈
      stack = stack[:len(stack)-1]
    } else {
      // 遍历字符串时遇到左括号 栈为空或栈顶元素与该右括号不匹配 证明有右括号多余
      return false
    }
  }
  if len(stack) != 0 {
    // 遍历完了字符串,但是栈非空,证明有左括号多余
    return false
  } else {
    return true
  }
}

Link

GitHub

目录
相关文章
|
2月前
|
算法
LeetCode第22题括号生成
该文章介绍了 LeetCode 第 22 题括号生成的解法,通过回溯算法生成所有可能的括号组合,在递归过程中根据左右括号数量的条件进行剪枝,从而得到有效的括号组合。
LeetCode第22题括号生成
|
2月前
|
存储 算法
LeetCode第20题有效的括号
该文章介绍了 LeetCode 第 20 题有效的括号的解法,通过分析有效括号的特征,使用栈结构存储括号关系,判断遇到右边括号时栈顶是否有匹配的左边括号,从而解决问题,同时总结了栈的先进后出结构可用于解决有规律的符号匹配问题。
LeetCode第20题有效的括号
|
2月前
|
算法 Python
【Leetcode刷题Python】括号匹配问题
一种解决括号匹配问题的Python实现方法,通过计算给定括号串的所有子串的最长合法括号子序列长度之和来确定权值。
17 0
|
2月前
|
机器学习/深度学习 Python
【Leetcode刷题Python】22. 括号生成
本文介绍了了LeetCode题目22的两种Python编程解决方案,题目要求生成所有可能的且有效的括号组合,包括暴力求解和回溯方法。
18 0
|
2月前
|
Python
【Leetcode刷题Python】20. 有效的括号
LeetCode上题目“20. 有效的括号”的Python解决方案,使用栈数据结构来验证括号序列的有效性。具体实现中,会在栈中预先放置一个特殊字符以避免在弹出操作时出现空栈错误,并通过匹配左右括号来判断括号序列是否有效。
19 0
|
3月前
|
算法 测试技术
力扣经典150题第五十一题:有效的括号
力扣经典150题第五十一题:有效的括号
29 0
|
4月前
|
算法 Java C语言
【经典算法】LeetCode 20:有效的括号(Java/C/Python3实现含注释说明,Easy)
【经典算法】LeetCode 20:有效的括号(Java/C/Python3实现含注释说明,Easy)
33 1
|
4月前
|
算法
【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成
【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成
|
4月前
|
算法
【经典LeetCode算法题目专栏分类】【第9期】深度优先搜索DFS与并查集:括号生成、岛屿问题、扫雷游戏
【经典LeetCode算法题目专栏分类】【第9期】深度优先搜索DFS与并查集:括号生成、岛屿问题、扫雷游戏
|
4月前
|
SQL 算法 数据可视化
LeetCode 题目 32:最长有效括号【python】
LeetCode 题目 32:最长有效括号【python】