leetcode力扣 20.有效的括号 go实现

记录一下leetcode刷题,大牛请绕道

思想

给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

上述是题目的描述,这里我们可以创建一个类型为uint8的切片(因为go在遍历字符串的时候,每个字符的类型就是uint8),然后当我们就可以遍历字符串,遇到左括号(([{)的时候Push入栈,然后当遇到右括号的时候,Pop出栈,如果出栈的元素与当前右括号不匹配的话,则可以认定当前字符串无效,等我们遍历完成后,最后检查一下栈是否为空,如果为空,则字符串有效;如果栈不为空,则字符串无效,说明无法匹配完全。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
type Stack struct {
element []uint8
}

func Init_Stack() *Stack {
return &Stack{element: []uint8{}}
}

func (this *Stack) Pop() uint8 {
len_stack := len(this.element)
if len_stack == 0{
return 0
}else {
top := this.element[len_stack-1]
this.element = this.element[:len_stack-1]
return top
}
}

func (this *Stack) Push(val uint8) {
this.element = append(this.element,val)
}

func isValid(s string) bool {
//遇到左括号,压栈,遇到右括号,弹出栈顶匹配
/*
[ == 91
( == 40
) == 41
] == 93
{ == 123
} == 125
*/
stack := Init_Stack()
flag := false
for i := 0; i < len(s); i++ {
//fmt.Println(stack)
if s[i] == 91 || s[i] == 40 || s[i] == 123 {
stack.Push(s[i])
}else if s[i] == 41{
// 匹配 )
pop := stack.Pop()
//fmt.Println("41",pop)
if pop == 40{
flag = true
}else {
flag = false
break
}
}else if s[i] == 93{
// 匹配 ]
pop := stack.Pop()
//fmt.Println("91",pop)
if pop == 91{
flag = true
}else {
flag = false
break
}
}else if s[i] == 125{
// 匹配 }
pop := stack.Pop()
//fmt.Println("125",pop)
if pop == 123{
flag = true
}else {
flag = false
break
}
}
}
if len(stack.element) != 0{
flag = false
}
return flag
}

本文标题:leetcode力扣 20.有效的括号 go实现

文章作者:xianyu123

发布时间:2022年01月10日 - 21:36

最后更新:2022年01月10日 - 21:56

原始链接:http://0clickjacking0.github.io/2022/01/10/leetcode力扣-20-有效的括号-go实现/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------    本文结束  感谢您的阅读    -------------