From 28978858033244093191c763dd7b8597faedae35 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 28 Aug 2016 00:51:54 +0200 Subject: Solve bracket --- go/bracket-push/bracket_push.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 go/bracket-push/bracket_push.go (limited to 'go/bracket-push/bracket_push.go') diff --git a/go/bracket-push/bracket_push.go b/go/bracket-push/bracket_push.go new file mode 100644 index 0000000..5c8d7e9 --- /dev/null +++ b/go/bracket-push/bracket_push.go @@ -0,0 +1,41 @@ +package brackets + +const testVersion = 3 + +type Stack []rune + +func (s *Stack) Push(r rune) { + *s = append(*s, r) +} + +func (s *Stack) Pop() (r rune) { + r, *s = (*s)[len(*s)-1], (*s)[:len(*s)-1] + return +} + +func (s *Stack) Len() int { + return len(*s) +} + +func Bracket(s string) (bool, error) { + var st Stack + pair := map[rune]rune{ + '}': '{', + ']': '[', + ')': '(', + } + for _, v := range s { + switch v { + case '{', '[', '(': + st.Push(v) + case '}', ']', ')': + if st.Len() == 0 { + return false, nil + } + if r := st.Pop(); r != pair[v] { + return false, nil + } + } + } + return st.Len() == 0, nil +} -- cgit v1.2.3