mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-11 21:10:58 +08:00
Update0020.有效的括号 Go示例代码
原有的实现已经足够简洁清晰,这个版本的代码增加了注释,提升了可读性。
This commit is contained in:
@ -218,22 +218,40 @@ class Solution:
|
||||
### Go:
|
||||
|
||||
```Go
|
||||
// 思路: 使用栈来进行括号的匹配
|
||||
// 时间复杂度 O(n)
|
||||
// 空间复杂度 O(n)
|
||||
func isValid(s string) bool {
|
||||
hash := map[byte]byte{')':'(', ']':'[', '}':'{'}
|
||||
stack := make([]byte, 0)
|
||||
if s == "" {
|
||||
return true
|
||||
}
|
||||
// 使用切片模拟栈的行为
|
||||
stack := make([]rune, 0)
|
||||
|
||||
for i := 0; i < len(s); i++ {
|
||||
if s[i] == '(' || s[i] == '[' || s[i] == '{' {
|
||||
stack = append(stack, s[i])
|
||||
} else if len(stack) > 0 && stack[len(stack)-1] == hash[s[i]] {
|
||||
stack = stack[:len(stack)-1]
|
||||
// m 用于记录某个右括号对应的左括号
|
||||
m := make(map[rune]rune)
|
||||
m[')'] = '('
|
||||
m[']'] = '['
|
||||
m['}'] = '{'
|
||||
|
||||
// 遍历字符串中的 rune
|
||||
for _, c := range s {
|
||||
// 左括号直接入栈
|
||||
if c == '(' || c == '[' || c == '{' {
|
||||
stack = append(stack, c)
|
||||
} else {
|
||||
// 如果是右括号,先判断栈内是否还有元素
|
||||
if len(stack) == 0 {
|
||||
return false
|
||||
}
|
||||
// 再判断栈顶元素是否能够匹配
|
||||
peek := stack[len(stack)-1]
|
||||
if peek != m[c] {
|
||||
return false
|
||||
}
|
||||
// 模拟栈顶弹出
|
||||
stack = stack[:len(stack)-1]
|
||||
}
|
||||
}
|
||||
|
||||
// 若栈中不再包含元素,则能完全匹配
|
||||
return len(stack) == 0
|
||||
}
|
||||
```
|
||||
|
Reference in New Issue
Block a user