| 10 | } |
| 11 | |
| 12 | func isValid(s string) bool { |
| 13 | // openedRound := 0 |
| 14 | // openedSquare := 0 |
| 15 | // openedFigure := 0 |
| 16 | var opened []byte |
| 17 | if s[0] != ')' && s[0] != ']' && s[0] != '}' { |
| 18 | opened = append(opened, s[0]) |
| 19 | } else { |
| 20 | return false |
| 21 | } |
| 22 | |
| 23 | for i := 1; i < len(s); i++ { |
| 24 | switch s[i] { |
| 25 | case ')': |
| 26 | if len(opened) > 0 && abs(')'-opened[len(opened)-1]) < 3 { |
| 27 | opened = opened[:len(opened)-1] |
| 28 | } else { |
| 29 | return false |
| 30 | } |
| 31 | |
| 32 | case ']': |
| 33 | if len(opened) > 0 && abs(']'-opened[len(opened)-1]) < 3 { |
| 34 | opened = opened[:len(opened)-1] |
| 35 | } else { |
| 36 | return false |
| 37 | } |
| 38 | |
| 39 | case '}': |
| 40 | if len(opened) > 0 && abs('}'-opened[len(opened)-1]) < 3 { |
| 41 | opened = opened[:len(opened)-1] |
| 42 | } else { |
| 43 | return false |
| 44 | } |
| 45 | default: |
| 46 | opened = append(opened, s[i]) |
| 47 | } |
| 48 | |
| 49 | } |
| 50 | if len(opened) > 0 { |
| 51 | return false |
| 52 | } |
| 53 | return true |
| 54 | |
| 55 | } |
| 56 | |
| 57 | func abs(a byte) byte { |
| 58 | if a > 0 { |