1、20. 有效的括号
题目:
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
思路:
- 注意for range 的v 和s[i] 类型是不同的即可
func isValid(s string) bool {
// 代码一刷
map1 := map[rune]rune {
')' : '(',
'}' : '{',
']' : '[',
}
stack1 := make([]rune, 0)
for _,v := range s {
if len(stack1) > 0 && map1[v] != ' ' && stack1[len(stack1)-1] == map1[v] {
stack1 = stack1[:len(stack1)-1]
} else {
stack1 = append(stack1, v)
}
}
if len(stack1) == 0 {
return true
}
return false
}
2、1047. 删除字符串中的所有相邻重复项
题目:
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
思路:
- go for range时候把它当成rune了,就uint32
- 想邻的
func removeDuplicates(s string) string {
// 代码一刷
stack := make([]rune, 0)
for _,v := range s {
if len(stack) > 0 && v == stack[len(stack)-1] {
stack = stack[: len(stack)-1]
} else {
stack = append(stack, v)
}
}
return string(stack)
}
3、150. 逆波兰表达式求值
题目:
输入:tokens = [“4”,“13”,“5”,“/”,“+”]
输出:6
解释:该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6
思路:
- Atoi i 代表 int
- 遇见算数符号,,就将前两位数字运算结果代替前两位数字,即可
func evalRPN(tokens []string) int {
// 代码一刷
stack := make([]int, 0)
for _,v := range tokens {
if v != "+" && v != "-" && v != "*" && v != "/" {
val, _ := strconv.Atoi(v)
stack = append(stack, val)
} else {
switch v {
case "+":
val := stack[len(stack)-1] + stack[len(stack)-2]
stack = stack[:len(stack)-2]
stack = append(stack, val)
case "-":
val := stack[len(stack)-2] - stack[len(stack)-1]
stack = stack[:len(stack)-2]
stack = append(stack, val)
case "*":
val := stack[len(stack)-2] * stack[len(stack)-1]
stack = stack[:len(stack)-2]
stack = append(stack, val)
case "/":
val := stack[len(stack)-2] / stack[len(stack)-1]
stack = stack[:len(stack)-2]
stack = append(stack, val)
}
}
}
return stack[0]
}