lettcode-有效的括号

来源

https://leetcode-cn.com/problems/valid-parentheses

问题描述

//给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
//有效字符串需满足:
//左括号必须用相同类型的右括号闭合。
//左括号必须以正确的顺序闭合。
//注意空字符串可被认为是有效字符串。

//示例 1:
//
//输入: “()”
//输出: true
//示例 2:
//
//输入: “()[]{}”
//输出: true
//示例 3:
//
//输入: “(]”
//输出: false
//示例 4:
//
//输入: “([)]”
//输出: false
//示例 5:
//
//输入: “{[]}”
//输出: true

func Push(res *[]byte, s byte) {
	temp := *res
	temp = append(temp, s)
	*res = temp
}

func Pop(res *[]byte) byte {
	temp := *res
	bc := temp[len(temp)-1]
	*res = temp[:len(temp)-1]
	return bc
}

func IsEmpty(res *[]byte) bool {
	return len(*res) == 0
}

func isValid(s string) bool {
	stack := new([]byte)
	for _, v := range s {
		if v == '(' {
			Push(stack, ')')
		} else if v == '{' {
			Push(stack, '}')
		} else if v == '[' {
			Push(stack, ']')
		} else if IsEmpty(stack) {
			return false
		} else if c := Pop(stack); int(c) != int(v) {
			return false
		}
	}
	return IsEmpty(stack)
}

利用FIFO,先进后出。解决括号必须成对出现,必须得出现左边才能出现右边,利用这个解决即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值