按照老师的思想用GO实现了一遍
func isValid(s string) bool {
str := strings.Split(s, "")
strLen := len(str)
var sMap = make(map[string]string, 3)
sMap["{"] = "}"
sMap["["] = "]"
sMap["("] = ")"
stack := make([]string, 0)
var tail string
for i := 0; i < strLen; i++ {
// 栈顶无元素时,新插入元素为}、]、)之一则不合法
stackLen := len(stack)
if stackLen < 1 {
tail = ""
} else {
tail = stack[:][stackLen-1]
}
if tail == "" {
if str[i] == "}" || str[i] == "]" || str[i] == ")" {
return false
}
}
// 栈顶元素与新插入元素为一对时,如{与}、[与]、(与),则对对碰消除,否则将新元素直接入栈
// fmt.Printf("tail: %v, stack: %v, cur ele: %v\n", tail, stack, str[i])
if sMap[tail] == str[i] {
stack = stack[0 : len(stack)-1]
} else {
stack = append(stack, str[i])
}
// fmt.Printf("cur stack: %v: stack len: %d\n", stack, len(stack))
}
// 全部入栈后,栈为空则合法,不为空则不合法
return len(stack) == 0
}
展开