Update0020.有效的括号 Go示例代码

原有的实现已经足够简洁清晰,这个版本的代码增加了注释,提升了可读性。
This commit is contained in:
cherrypicker
2023-12-23 08:34:38 +08:00
parent 1fbe055325
commit 9319ce9cdc

View File

@ -218,23 +218,41 @@ class Solution:
### Go ### Go
```Go ```Go
// 思路: 使用栈来进行括号的匹配
// 时间复杂度 O(n)
// 空间复杂度 O(n)
func isValid(s string) bool { func isValid(s string) bool {
hash := map[byte]byte{')':'(', ']':'[', '}':'{'} // 使用切片模拟栈的行为
stack := make([]byte, 0) stack := make([]rune, 0)
if s == "" {
return true
}
for i := 0; i < len(s); i++ { // m 用于记录某个右括号对应的左括号
if s[i] == '(' || s[i] == '[' || s[i] == '{' { m := make(map[rune]rune)
stack = append(stack, s[i]) m[')'] = '('
} else if len(stack) > 0 && stack[len(stack)-1] == hash[s[i]] { m[']'] = '['
stack = stack[:len(stack)-1] m['}'] = '{'
} else {
return false // 遍历字符串中的 rune
} for _, c := range s {
} // 左括号直接入栈
return len(stack) == 0 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
} }
``` ```