数据结构入门9 - 栈/队列『有效的括号| 用栈实现队列』


💪💪💪此系列仅为记录本人补充学习数据结构相关知识,有兴趣的,大家可以共同学习👏👏👏

[= 有效的括号 =]

题目描述

题目传送门

解题思路

1、如果是单数则肯定不是有效括号
2、利用栈的概念,如果当点扩展在栈内,且与最顶端的括号为对应关系,则为有效括号
3、如果没有,则入栈

解题方法

func isValid(s string) bool {
	// 单数肯定不是
	if len(s)%2 == 1 {
		return false
	}
	// 定义一个括号map
	pairs := map[byte]byte{
		')': '(',
		']': '[',
		'}': '{',
	}
	stack := []byte{}
	for i := 0; i < len(s); i++ {
		// 判断括号是否存在
		if pairs[s[i]] > 0 {
			// 判断栈内最上层是否与对应括号对应
			if len(stack) == 0 || stack[len(stack)-1] != pairs[s[i]] {
				return false
			}
			// 如果匹配对应括号,则出栈
			stack = stack[:len(stack)-1]
		} else {
			stack = append(stack, s[i])
		}
	}
	// 最后栈的长度如果不等0 则就不是有效扩展
	return len(stack) == 0
}

[= 用栈实现队列 =]

题目描述

题目传送门

解题思路

关于栈、队列我们只需记住如下规则即可
栈:先入后出
队列:先入先出

解题方法

type MyQueue struct {
	inStack, outStack []int
}

func Constructor() MyQueue {
	return MyQueue{}
}

// push(x):将元素 x 推到队列的末尾
func (this *MyQueue) Push(x int) {
	this.inStack = append(this.inStack, x)
}

// 将元素从进栈列转移至出栈列
func (this *MyQueue) in2out() {
	// 一定注意队列先入先出原则
	// 栈后入先出
	for len(this.inStack) > 0 {
		// 将入栈的第一个元素追加至出栈列中
		this.outStack = append(this.outStack, this.inStack[len(this.inStack)-1])
		// 删除入栈列中相应元素
		this.inStack = this.inStack[:len(this.inStack)-1]
	}
}

//pop: 从队列的开头移除并返回元素
func (this *MyQueue) Pop() int {
	if len(this.outStack) == 0 {
		this.in2out()
	}
	x := this.outStack[len(this.outStack)-1]
	this.outStack = this.outStack[:len(this.outStack)-1]
	return x
}

// peek:返回队列开头的元素
func (this *MyQueue) Peek() int {
	if len(this.outStack) == 0 {
		this.in2out()
	}
	return this.outStack[len(this.outStack)-1]
}

// empty: 如果队列为空,返回 true ;否则,返回 false
func (this *MyQueue) Empty() bool {
	return len(this.inStack) == 0 && len(this.outStack) == 0
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bennett_G

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值