Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "io"
- "os"
- )
- type RStack struct {
- brackets []rune
- }
- func (s *RStack) Push(bracket rune) {
- s.brackets = append(s.brackets, bracket)
- }
- func (s *RStack) Peek() rune {
- return s.brackets[len(s.brackets)-1]
- }
- func (s *RStack) Pop() rune {
- ret := s.Peek()
- s.brackets = s.brackets[0 : len(s.brackets)-1]
- return ret
- }
- func (s *RStack) Count() int {
- return len(s.brackets)
- }
- var stdin io.Reader = os.Stdin
- func main() {
- var tests int
- fmt.Fscanf(stdin, "%d", &tests)
- for t := 0; t < tests; t++ {
- var str string
- fmt.Fscanf(stdin, "%s", &str)
- if isBalanced(str) {
- fmt.Println("YES")
- } else {
- fmt.Println("NO")
- }
- }
- }
- // Determine wether the passed string contains balanced pairs of brackets
- func isBalanced(b string) bool {
- open_to_close := map[rune]rune{'{': '}', '(': ')', '[': ']'}
- rs := new(RStack)
- for _, v := range b {
- if _, ok := open_to_close[v]; ok {
- rs.Push(v)
- } else if rs.Count() == 0 || open_to_close[rs.Pop()] != v {
- return false
- }
- }
- return rs.Count() == 0
- }
Add Comment
Please, Sign In to add comment