算法:
栈算是比较常见 的一种数据结构,先进后出,一般操作步骤如下:
1. 建立一个栈,golang中往往使用slice来操作2. 满足条件的元素入栈3. 出栈的时候一般都是最后一个入栈的元素,这里需要调节元素的位置
题目1: 有效的括号
https://leetcode-cn.com/problems/valid-parentheses/
![]()
代码实现:
func isValid(s string) bool { if len(s)%2 == 1 { return false } cc := []byte(s) var satckStr []byte for _, d := range cc { if d == '(' || d== '{' || d == '[' { satckStr = append(satckStr,d) } else { last := len(satckStr)-1 if ok := popStrOk(d,satckStr,last); !ok { return false } satckStr = satckStr[:last] } } if len(satckStr) != 0 { return false } return true}func popStrOk(d byte, satckStr []byte, last int) bool{ if len(satckStr) == 0 { return false } switch d { case ')': if satckStr[last] != '(' { return false } case ']': if satckStr[last] != '[' { return false } case '}': if satckStr[last] != '{' { return false } default: return false } return true}
执行结果:
![]()
题目2: 删除最外层的括号
https://leetcode-cn.com/problems/remove-outermost-parentheses/
![]()
代码实现:
func removeOuterParentheses(S string) string { strs := []byte(S) len := len(strs) L,R := 0,0 var stacks []byte for i := 0; i < len; i++{ if strs[i]=='(' { L++ } else { R++ } if R != L && L != 1{ stacks =append(stacks,strs[i]) } else if R == L { L,R = 0,0 } } return string(stacks)}
执行结果:
![]()
题目3: 最小栈
https://leetcode-cn.com/problems/min-stack/
![]()
代码实现:
type MinStack struct { Arr []int Mins []int}func Constructor() MinStack { return MinStack{}}
func (this *MinStack) Push(x int) { this.Arr = append(this.Arr,x) if len(this.Mins) == 0 || x <= this.Mins[len(this.Mins)-1] { this.Mins = append(this.Mins,x) } return}
func (this *MinStack) Pop() { if len(this.Arr) == 0 { return } last := len(this.Arr)-1 if this.Arr[last] <= this.Mins[len(this.Mins)-1] { this.Mins = this.Mins[:len(this.Mins)-1] } this.Arr = this.Arr[:last] return}
func (this *MinStack) Top() int { return this.Arr[len(this.Arr)-1]}
func (this *MinStack) GetMin() int { return this.Mins[len(this.Mins)-1]}
执行结果:
![]()