From b0d252705a0f8bc395760e1e8ea73b5da8296666 Mon Sep 17 00:00:00 2001 From: VicRen Date: Tue, 15 Dec 2020 09:16:01 +0800 Subject: [PATCH] 20201215 --- 20201215/main.go | 35 ++++++++++++++++++++++++++ 20201215/main_test.go | 57 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 20201215/main.go create mode 100644 20201215/main_test.go diff --git a/20201215/main.go b/20201215/main.go new file mode 100644 index 0000000..65073dd --- /dev/null +++ b/20201215/main.go @@ -0,0 +1,35 @@ +package main + +func main() { + +} + +func isValid(s string) bool { + if len(s)%2 == 1 { + return false + } + var stack []uint8 + for i := 0; i < len(s); i++ { + c := s[i] + switch c { + case '(': + fallthrough + case '{': + fallthrough + case '[': + stack = append(stack, c) + default: + if len(stack) == 0 { + return false + } + last := stack[len(stack)-1] + if (last == '(' && c == ')') || last == '[' && c == ']' || last == '{' && c == '}' { + stack = stack[:len(stack)-1] + } + } + } + if len(stack) == 0 { + return true + } + return false +} diff --git a/20201215/main_test.go b/20201215/main_test.go new file mode 100644 index 0000000..c796740 --- /dev/null +++ b/20201215/main_test.go @@ -0,0 +1,57 @@ +package main + +import "testing" + +func Test_isValid(t *testing.T) { + type args struct { + s string + } + tests := []struct { + name string + args args + want bool + }{ + { + "test1", + args{ + "()", + }, + true, + }, + { + "test2", + args{ + "()[]{}", + }, + true, + }, + { + "test3", + args{ + "(]", + }, + false, + }, + { + "test4", + args{ + "([)]", + }, + false, + }, + { + "test5", + args{ + "{[]}", + }, + true, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := isValid(tt.args.s); got != tt.want { + t.Errorf("isValid() = %v, want %v", got, tt.want) + } + }) + } +}