题目描述
Given a string containing just the characters ‘(’, ‘)’, ‘{’, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.
An input string is valid if:
Open brackets must be closed by the same type of brackets.
Open brackets must be closed in the correct order.
Note that an empty string is also considered valid.
Example 1:
Input: "()"
Output: true
Example 2:
Input: "()[]{}"
Output: true
Example 3:
Input: "(]"
Output: false
Example 4:
Input: "([)]"
Output: false
Example 5:
Input: "{[]}"
Output: true
GoLang 语法:slice
- Go 中的
slice
和array
的区别是,slice
是可变长数组,而array
是定长数组 slice
主要有三个属性: 指向实现slice
的数组的指针,slice
的容量(可以通过cap
获取) 和slice
的长度(可以通过len
获取)slice
的赋值是浅拷贝。因此,作为参数传递进函数时,在函数中对指针指向的数组的更改会影响原slice
。(容量和长度字段也是值传递,因此,不会受函数内操作的影响)- 对 slice 的子 slice 的操作会影响原 slice(它们共用一个 underlying array.)
append
函数向 slice 中添加新的元素。make([]T, len, cap)
创建一个长度为len
, 容量为cap
的 slice
AC 代码
func isValid(s string) bool {
// 创建一个名为 stk 的 slice
stk := make([]byte, 0, len(s))
r2l := map[byte]byte{
'}': '{',
']': '[',
')': '(',
}
for i := 0; i < len(s); i++{
switch s[i]{
case '{', '[', '(' :
// 对 slice 进行 append 操作
stk = append(stk, s[i])
case '}', ']', ')' :
if len(stk) == 0 || stk[len(stk)-1] != r2l[s[i]] {
return false
} else {
// 缩短 slice 的长度
stk = stk[:len(stk)-1]
}
}
}
return (len(stk) == 0)
}