-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
84 lines (72 loc) · 1.61 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package main
import (
"fmt"
"strings"
)
// https://leetcode.cn/problems/valid-parentheses/
//给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
//有效字符串需满足:
//左括号必须用相同类型的右括号闭合。
//左括号必须以正确的顺序闭合。
//每个右括号都有一个对应的相同类型的左括号。
//示例 1: 输入:s = "()" 输出:true
//示例 2: 输入:s = "()[]{}" 输出:true
//示例 3: 输入:s = "(]" 输出:false
func main() {
fmt.Println(isValid("{[]}"))
}
const (
LeftBracket = "("
RightBracket = ")"
LeftMiddleBracket = "["
RightMiddleBracket = "]"
LeftCurlyBracket = "{"
RightCurlyBracket = "}"
)
var SymbolMap = map[string]string{
RightBracket: LeftBracket,
RightMiddleBracket: LeftMiddleBracket,
RightCurlyBracket: LeftCurlyBracket,
}
type stack struct {
top int
value []string
}
func isValid(s string) bool {
var st *stack = &stack{
top: -1,
value: []string{},
}
isValid := true
for _, value := range s {
if strings.Contains("([{", string(value)) {
push(st, string(value))
} else {
v := pop(st)
if v != SymbolMap[string(value)] {
isValid = false
break
}
}
}
return isValid && st.top == -1
}
// push 入栈
func push(st *stack, s string) {
st.top++
st.value = append(st.value, s)
}
// pop 出栈
func pop(st *stack) string {
if st.top == -1 {
return ""
}
v := st.value[st.top]
st.top--
if st.top == -1 {
st.value = []string{}
} else {
st.value = st.value[0 : len(st.value)-1]
}
return v
}