每日一题 --- 有效的括号[力扣][Go]

有效的括号

题目:20. 有效的括号

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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例 1:

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

示例 2:

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

示例 3:

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

提示:

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

方法:

括号匹配可以使用栈来完成。代码如下

go 复制代码
func isValid(s string) bool {
	length := len(s)
	stack := make([]rune, length)
	stackidx := -1
	for _, r := range s {
		if r == '{' || r == '[' || r == '(' {
			stackidx++
			stack[stackidx] = r
		} else {
			if stackidx == -1 {
				return false
			}
			switch r {
			case '}':
				if stack[stackidx] != '{' {
					return false
				}
			case ')':
				if stack[stackidx] != '(' {
					return false
				}
			case ']':
				if stack[stackidx] != '[' {
					return false
				}
			}
			stackidx--
		}
	}
	if stackidx != -1 {
		return false
	}
	return true
}
相关推荐
jerry6094 小时前
7天用Go从零实现分布式缓存GeeCache(改进)(未完待续)
分布式·缓存·golang
舞动CPU5 小时前
linux c/c++最高效的计时方法
linux·运维·服务器
杜杜的man5 小时前
【go从零单排】Closing Channels通道关闭、Range over Channels
开发语言·后端·golang
秦jh_6 小时前
【Linux】多线程(概念,控制)
linux·运维·前端
DdddJMs__1357 小时前
C语言 | Leetcode C语言题解之第557题反转字符串中的单词III
c语言·leetcode·题解
Sunyanhui18 小时前
力扣 二叉树的直径-543
算法·leetcode·职场和发展
一个不喜欢and不会代码的码农8 小时前
力扣105:从先序和中序序列构造二叉树
数据结构·算法·leetcode
keep__go8 小时前
Linux 批量配置互信
linux·运维·服务器·数据库·shell
矛取矛求8 小时前
Linux中给普通账户一次性提权
linux·运维·服务器
Fanstay9858 小时前
在Linux中使用Nginx和Docker进行项目部署
linux·nginx·docker