算法36-检查括号

题目:

检查所有的大中小括号是否完整且符合规则

分析:

借助栈的特性,遇到左括号,无论哪种括号,压入栈,遇到右括号,从栈弹出元素,如果与之匹配,continue
如果不匹配,返回false

代码:

package main

import (
	"fmt"
	"errors"
)

type Stack []int

// 入栈
func (s *Stack) push(a int) {
	*s = append(*s, a)
}

// 出栈
func (s *Stack) pop() (int, error) {
	if (len(*s) == 0) {
		return 0, errors.New("Empty Stack")
	}
	a := *s
	defer func() {
		*s = a[:len(a) - 1]
	}()
	return a[len(a) - 1], nil
}
func match(str string) bool{
	var s Stack = []int{12}

	if len(str)%2 !=0{
		return false
	}

	for _,v:=range(str){
		// fmt.Printf("%T" ,v)
		if v == 123 || v== 91 || v== 40{
			s.push(int(v))
		}else{
			a, err := s.pop()
			if err ==nil{
				if (a==123 && v==125) || (a==91 && v==93) || (a==40 && v==41){
					continue
				}else{
					return false
				}
			}else{
				if err ==errors.New("Empty Stack"){
					return true
				}else{
					return false
				}
			}

		}
	}

	return true

}
//123  125  91   93     40     41   "{}[]()"
func main() {
	// 数据初始化化
	// var s Stack = []int{12}
	// s.push(10)
	// fmt.Printf("入栈后的 Stack : %v\n", s)

	// a, err := s.pop()
	// fmt.Printf("出栈的数据:%v , 目前的 Stack : %v, Error: %v\n", a, s, err)
	str:="{{}[]()}"
	fmt.Println(match(str))

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值