跳转至

LC20 - 有效的括号

ValidParentheses.go
package Stack

// Stack is a generic type.
type Stack[T any] []T

func (s *Stack[T]) Size() int {
    return len(*s)
}

func (s *Stack[T]) IsEmpty() bool {
    return s.Size() == 0
}

func (s *Stack[T]) Push(val T) {
    *s = append(*s, val)
}

func (s *Stack[T]) Pop() T {
    if s.IsEmpty() {
        var zero T
        return zero
    }
    e := (*s)[s.Size()-1]
    *s = (*s)[:s.Size()-1]
    return e
}

func (s *Stack[T]) Top() T {
    if s.IsEmpty() {
        var zero T
        return zero
    }
    return (*s)[s.Size()-1]
}

func isValid(s string) bool {
    stack := new(Stack[int32])
    for _, ch := range s {
        if ch == '(' || ch == '[' || ch == '{' {
            stack.Push(ch)
        } else {
            if stack.IsEmpty() {
                return false
            }
            top := stack.Pop()
            if !isMatch(top, ch) {
                return false
            }
        }
    }
    return stack.IsEmpty()
}

func isMatch(left int32, right int32) bool {
    if left == '(' {
        return right == ')'
    } else if left == '[' {
        return right == ']'
    } else if left == '{' {
        return right == '}'
    } else {
        return false
    }
}