Guest User

Untitled

a guest
Nov 17th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.02 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "io"
  6. "os"
  7. )
  8.  
  9. type RStack struct {
  10. brackets []rune
  11. }
  12.  
  13. func (s *RStack) Push(bracket rune) {
  14. s.brackets = append(s.brackets, bracket)
  15. }
  16.  
  17. func (s *RStack) Peek() rune {
  18. return s.brackets[len(s.brackets)-1]
  19. }
  20.  
  21. func (s *RStack) Pop() rune {
  22. ret := s.Peek()
  23. s.brackets = s.brackets[0 : len(s.brackets)-1]
  24. return ret
  25. }
  26.  
  27. func (s *RStack) Count() int {
  28. return len(s.brackets)
  29. }
  30.  
  31. var stdin io.Reader = os.Stdin
  32.  
  33. func main() {
  34.  
  35. var tests int
  36.  
  37. fmt.Fscanf(stdin, "%d", &tests)
  38.  
  39. for t := 0; t < tests; t++ {
  40. var str string
  41. fmt.Fscanf(stdin, "%s", &str)
  42. if isBalanced(str) {
  43. fmt.Println("YES")
  44. } else {
  45. fmt.Println("NO")
  46. }
  47. }
  48.  
  49. }
  50.  
  51. // Determine wether the passed string contains balanced pairs of brackets
  52. func isBalanced(b string) bool {
  53.  
  54. open_to_close := map[rune]rune{'{': '}', '(': ')', '[': ']'}
  55.  
  56. rs := new(RStack)
  57.  
  58. for _, v := range b {
  59. if _, ok := open_to_close[v]; ok {
  60. rs.Push(v)
  61. } else if rs.Count() == 0 || open_to_close[rs.Pop()] != v {
  62. return false
  63. }
  64. }
  65.  
  66. return rs.Count() == 0
  67. }
Add Comment
Please, Sign In to add comment