题目:
检查所有的大中小括号是否完整且符合规则
分析:
借助栈的特性,遇到左括号,无论哪种括号,压入栈,遇到右括号,从栈弹出元素,如果与之匹配,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))
}