字符串消消乐
给定一个由数字组成的字符串,要求你按照以下规则消除相邻的数字,并计算最终剩下的字符串长度:
• 当字符串中相邻的两个数字相加等于 10 时,这两个数字会被消除,剩下的部分会拼接成新的字符串,继续按照相同的规则消除。 • 每次消除只发生在相邻的数字之间,并且每次只会消除一对相邻数字。 • 你需要计算最终剩下的字符串长度,使得字符串无法再消除时的长度最小。
解题思路:
- 用栈方法
- 将字符串转为数字, 与'0'减法运算
- 遍历,每逢当前元素和栈顶元素和为10,执行出栈(消除),否则入栈
- 最终返回栈的长度
func minLengthAfterElimination(s string) int {
stack := []int{}
// 遍历字符串中的每个字符
for i := 0; i < len(s); i++ {
num := int(s[i] - '0') // 将字符转换为数字
// 如果栈不为空且栈顶元素与当前元素之和为10,执行消除操作
if len(stack) > 0 && stack[len(stack)-1]+num == 10 {
// 消除栈顶元素
stack = stack[:len(stack)-1]
} else {
// 否则将当前元素压入栈中
stack = append(stack, num)
}
}
// 返回栈的长度即为最终剩余字符串长度
return len(stack)
}