type st []stringfunc (s *st) push(str string) { *s = append(*s, str)}func (s *st) pop() string { n := len(*s) if n == 0 { return "" } str := (*s)[n-1] *s = (*s)[:n-1] return str}func isValid(s string) bool { var ok = true left := []string{"(", "[", "{"} right := map[string]string{ ")": "(", "]": "[", "}": "{", } var st st for _, v := range s { var ty int for _, x := range left { if string(v) == x { ty = 1 break } } if ty == 1 { st.push(string(v)) } else { // 匹配 xx := st.pop() if xx == "" { ok = false break } if xx != right[string(v)] { ok = false break } ty = 2 } } if len(st) != 0 { ok = false } return ok}