栈是一种先进后出的数据结构
思路:遍历字符串,如果是左括号则放进栈中,如果是右括号则从栈中推出元素,看两者是否匹和,
如果均匹和且栈中为空,返回true
// 时间复杂度为O(n)
// 空间复杂度为O(n)
func isValid2(s string) bool {
m := make(map[byte]byte)
m['('] = ')'
m['['] = ']'
m['{'] = '}'
// 数组实现栈功能
sli := make([]byte, 0)
if len(s) == 0 {
return true
}
if len(s)%2 == 1 {
return false
}
for i, b := range s {
if i == 0 && (s[i] == ')' || s[i] == ']' || s[i] == '}') {
return false
}
if b == '(' || b == '[' || b == '{' {
sli = append(sli, byte(b))
} else {
// 这里实现栈的功能
left := sli[len(sli)-1]
sli = sli[:len(sli)-1]
if m[left] != byte(b) {
return false
}
}
}
if len(sli) != 0 {
return false
}
return true
}
提交leetcode,通过