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,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
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user