上饶专业企业网站建设,网站制作是不是要先用ps做,三亚网红餐厅,建筑信用信息查询平台20. 有效的括号
这个是典型的使用栈#xff0c;来进行匹配。 因为栈是先进后出#xff0c;所以#xff0c;最近的左括号一定在栈顶。如果不是#xff0c;则就是不匹配了。
func isValid(s string) bool {stack : Stack{}dict : map[byte]byte {): (,]: [,}: {,}for _, it…20. 有效的括号
这个是典型的使用栈来进行匹配。 因为栈是先进后出所以最近的左括号一定在栈顶。如果不是则就是不匹配了。
func isValid(s string) bool {stack : Stack{}dict : map[byte]byte {): (,]: [,}: {,}for _, item : range []byte(s) {if leftVal, ok : dict[item]; ok {if stack.pop() ! leftVal {return false}} else {stack.push(item)}}return stack.length 0
}type Stack struct {data []bytelength int
}func (s *Stack) pop() (v byte) {if s.length 1 {return }v s.data[s.length-1]s.data s.data[:s.length-1]s.length--return
}func (s *Stack) push(v byte) {s.data append(s.data, v)s.length
} 1047. 删除字符串中的所有相邻重复项
func removeDuplicates(s string) string {// 思路和栈顶不等的时候s2 : []byte(s)stack : Stack{}stack.push(s2[0])for i : 1; i len(s2); i {if v : stack.top(); v ! s2[i] {stack.push(s2[i])} else {stack.pop()}}return string(stack.data)
}type Stack struct {data []bytelength int
}func (s *Stack) pop() (v byte) {if s.length 1 {return }v s.data[s.length-1]s.data s.data[:s.length-1]s.length--return
}func (s *Stack) top() (v byte) {if s.length 1 {return }v s.data[s.length-1]return
}func (s *Stack) push(v byte) {s.data append(s.data, v)s.length
}
题目中是连续两个重复字符才删除那么是多个重复字符如何删除呢 可以增加一个last_char 变量存放着上一次的结果。
s2 : []byte(s)
stack : Stack{}
stack.push(s2[0])
var lastChar s2[0]
for i : 1; i len(s2); i {v : stack.top()if v s2[i] {stack.pop()} else if (v ! lastChar) (v ! s2[i]) {// 和上一次字符相同时不需要入栈stack.push(s2[i])}
}
return string(stack.data)6. 逆波兰表达式求值
逆波兰表达式是一种后缀表达式运算符号在后面前面俩是运算数。
本质上还是使用栈来进行取值然后运算。
import strconvfunc evalRPN(tokens []string) int {// 思路符号就退出两个数字然后运算既可stack : Stack{}var (s1 ints2 intresult int)for _, val : range tokens {if val || val - || val * || val / {s2 stack.pop()s1 stack.pop()if val {stack.push(s1 s2)} else if val - {stack.push(s1 - s2)} else if val * {stack.push(s1 * s2)} else if val / {stack.push(s1 / s2)}} else {intVal, _ : strconv.Atoi(val)stack.push(intVal)}}result stack.pop()return result
}type Stack struct {data []intlength int
}func (s *Stack) pop() (v int) {if s.length 1 {return }v s.data[s.length-1]s.data s.data[:s.length-1]s.length--return
}func (s *Stack) top() (v int) {if s.length 1 {return }v s.data[s.length-1]return
}func (s *Stack) push(v int) {s.data append(s.data, v)s.length
}