栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

leetcode 20. 有效的括号

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode 20. 有效的括号

目录
  • 一、题目
    • 有效的括号
  • 二、解题思路
    • 思路一:堆栈
    • 思路二:整对删除
  • 三、代码实现
    • 解法一:堆栈
    • 解法二:整对删除


一、题目 有效的括号

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

有效字符串需满足:

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

示例 1:

输入:s = “()”
输出:true

示例 2:

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

示例 3:

输入:s = “(]”
输出:false

示例 4:

输入:s = “([)]”
输出:false

示例 5:

输入:s = “{[]}”
输出:true

二、解题思路 思路一:堆栈

题目比较简单,很容易想到使用堆栈来解决该问题

  1. 将括号进行分类,分为左括号和右括号:‘{’、‘[’、‘(‘均为左括号,’}’、‘]’、')'为右括号
  2. 遍历字符串,如果为左括号,存入堆栈;如果为右括号,判断栈顶元素是否和该右括号匹配。此处匹配可以利用map来实现,示例如下:
	validMap := map[byte]byte{
		'}': '{',
		']': '[',
		')': '(',
	}
	此处将右括号定义为key,左括号定义为value的目的是:
	在判断字符为右括号的同时直接将其对应的左括号取出,方便后续和栈顶元素进行匹配
  1. 如果不匹配直接返回false,表示该字符串无效;如果匹配则将栈顶元素移除
  2. 遍历完成后,校验该栈是否为空,不为空表示还有元素未出栈,字符串无效
思路二:整对删除

此实现方法为一种取巧的思路,具体思路为:

将’(‘,’)’ 和 ‘{’,‘}’ 和 ‘[’,‘]’ 成对的进行删除,直到无法继续删除,最后判断字符串是否还有剩余,如有则表示该字符串无效

三、代码实现 解法一:堆栈

golang代码实现

func IsValid(s string) bool {
	if len(s)%2 != 0 {
		// 如果s长度不为2的倍数,该字符串一定无效
		return false
	}
	validMap := map[byte]byte{
		'}': '{',
		']': '[',
		')': '(',
	}
	stack := make([]byte, 0)
	for _, char := range s {
		if v, ok := validMap[byte(char)]; ok {
			// 如果当前字符为右括号,则需要判断堆栈栈顶的字符是否为对应的左括号
			if len(stack) < 1 || stack[len(stack)-1] != v {
				// 栈顶元素和预期左括号不相等则字符串不合规
				return false
			}
			// 如果匹配成功则移除栈顶元素
			stack = stack[:len(stack)-1]
		} else {
			// 如果当前字符为左括号,将字符入栈
			stack = append(stack, byte(char))
		}
	}

	return len(stack) == 0
}

解题效果:

解法二:整对删除

golang代码实现

func isValid(s string) bool {
    loop := true
	for loop {
		trim := strings.ReplaceAll(s, "{}", "")
		trim = strings.ReplaceAll(trim, "[]", "")
		trim = strings.ReplaceAll(trim, "()", "")
		loop = len(trim) != len(s)
		s = trim
	}
	return len(s) == 0
}

解题效果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/867330.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号