0
点赞
收藏
分享

微信扫一扫

刷 LeetCode 从零开始学 GoLang(6): 20. Valid Parentheses

westfallon 2022-12-05 阅读 101


题目描述

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

  1. Go 中的 ​​slice​​​ 和 ​​array​​​ 的区别是,​​slice​​​ 是可变长数组,而 ​​array​​ 是定长数组
  2. ​slice​​​ 主要有三个属性: 指向实现 ​​slice​​​ 的数组的指针,​​slice​​​ 的容量(可以通过 ​​cap​​​ 获取) 和 ​​slice​​​ 的长度(可以通过 ​​len​​ 获取)
  3. ​slice​​​ 的赋值是浅拷贝。因此,作为参数传递进函数时,在函数中对指针指向的数组的更改会影响原 ​​slice​​。(容量和长度字段也是值传递,因此,不会受函数内操作的影响)
  4. 对 slice 的子 slice 的操作会影响原 slice(它们共用一个 underlying array.)
  5. ​append​​ 函数向 slice 中添加新的元素。
  6. ​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)
}


举报

相关推荐

0 条评论