稍稍有点边界值没有考虑到,还是很简单的一道题
func isValid(s string) bool {
if len(s) == 0 {
return true
}
var t []byte
t = append(t, s[0])
for i := 1; i < len(s); i++ {
switch s[i] {
case ')' :
if len(t) > 0 && t[len(t)-1] == '(' {
t = t[:len(t)-1]
} else {
return false
}
case '}' :
if len(t) > 0 && t[len(t)-1] == '{' {
t = t[:len(t)-1]
} else {
return false
}
case ']' :
if len(t) > 0 && t[len(t)-1] == '[' {
t = t[:len(t)-1]
} else {
return false
}
default:
t = append(t, s[i])
}
}
return len(t) == 0
}
1047. 删除字符串中的所有相邻重复项 - 力扣(LeetCode)
很简单的逻辑
func removeDuplicates(s string) string {
var ans []byte
for i := 0; i < len(s); i++ {
if len(ans) > 0 && s[i] == ans[len(ans)-1] {
ans = ans[:len(ans)-1]
} else {
ans = append(ans, s[i])
}
}
return string(ans)
}
func evalRPN(tokens []string) int {
stack := []int{}
for _, token := range tokens {
val, err := strconv.Atoi(token)
if err == nil {
stack = append(stack, val)
} else {
num1, num2 := stack[len(stack)-2], stack[len(stack)-1]
stack = stack[:len(stack)-2]
switch token {
case "+":
stack = append(stack, num1+num2)
case "-":
stack = append(stack, num1-num2)
case "*":
stack = append(stack, num1*num2)
default:
stack = append(stack, num1/num2)
}
}
}
return stack[0]
}