1. type st []string
    2. func (s *st) push(str string) {
    3. *s = append(*s, str)
    4. }
    5. func (s *st) pop() string {
    6. n := len(*s)
    7. if n == 0 {
    8. return ""
    9. }
    10. str := (*s)[n-1]
    11. *s = (*s)[:n-1]
    12. return str
    13. }
    14. func isValid(s string) bool {
    15. var ok = true
    16. left := []string{"(", "[", "{"}
    17. right := map[string]string{
    18. ")": "(",
    19. "]": "[",
    20. "}": "{",
    21. }
    22. var st st
    23. for _, v := range s {
    24. var ty int
    25. for _, x := range left {
    26. if string(v) == x {
    27. ty = 1
    28. break
    29. }
    30. }
    31. if ty == 1 {
    32. st.push(string(v))
    33. } else {
    34. // 匹配
    35. xx := st.pop()
    36. if xx == "" {
    37. ok = false
    38. break
    39. }
    40. if xx != right[string(v)] {
    41. ok = false
    42. break
    43. }
    44. ty = 2
    45. }
    46. }
    47. if len(st) != 0 {
    48. ok = false
    49. }
    50. return ok
    51. }