From 230388b0835578bd555c0f9e9d6c0532e60347d0 Mon Sep 17 00:00:00 2001 From: Sandy Date: Fri, 14 Dec 2018 11:38:36 +0800 Subject: [PATCH] Update valid_parentheses.go --- valid_parentheses/valid_parentheses.go | 67 +++++++++----------------- 1 file changed, 22 insertions(+), 45 deletions(-) diff --git a/valid_parentheses/valid_parentheses.go b/valid_parentheses/valid_parentheses.go index 3de3451..54151ed 100644 --- a/valid_parentheses/valid_parentheses.go +++ b/valid_parentheses/valid_parentheses.go @@ -1,49 +1,26 @@ package valid_parentheses func isValid(s string) bool { - if len(s)%2 != 0 { - return false - } - left := map[byte]struct{}{ - '(': struct{}{}, - '[': struct{}{}, - '{': struct{}{}, - } - right := map[byte]struct{}{ - ')': struct{}{}, - ']': struct{}{}, - '}': struct{}{}, - } - bytes := []byte(s) - stack := []byte{} - for i := range bytes { - if _, ok := left[bytes[i]]; ok { - stack = append(stack, bytes[i]) - } else if _, ok = right[bytes[i]]; ok { - if len(stack) == 0 { - return false - } - switch stack[len(stack)-1] { - case '(': - if bytes[i] != ')' { - return false - } - case '[': - if bytes[i] != ']' { - return false - } - case '{': - if bytes[i] != '}' { - return false - } - } - stack = stack[:len(stack)-1] - } else { - return false - } - } - if len(stack) == 0 { - return true - } - return false + m := map[rune]rune{ + '(': ')', + '[': ']', + '{': '}', + } + stack := make([]rune, len(s)) + top := 0 + for _, c := range s { + switch c { + case '(', '[', '{': + stack[top] = m[c] + top++ + case ')', ']', '}': + if top > 0 && stack[top-1] == c { + top-- + } else { + return false + } + } + } + + return top == 0 }