func isValid(s string) bool {
var n = len(s)
if n%2!=0{
return false//偶数个无法闭合
}
var pairs = map[byte]byte{
‘)‘:‘(‘,
‘]‘:‘[‘,
‘}‘:‘{‘,
}
var stack = []byte{}
for i := 0; i < n; i++ {
// s[i]是右括号,则判断是否栈顶是其匹配的左括号
if symbol, ok := pairs[s[i]]; ok {
// 如果栈为空 或 栈顶元素不是对应的左括号
if len(stack) == 0 || stack[len(stack)-1] != symbol {
return false
}
// 栈中的一个左括号匹配到pairs中的右括号,则出栈
stack = stack[:len(stack)-1]
} else {// s[i]是左括号,则入栈
stack = append(stack, s[i])
}
}
// 右括号全部匹配到左括号,即全部出栈
return len(stack) == 0
}
原文:https://www.cnblogs.com/pangqianjin/p/14637149.html