0
点赞
收藏
分享

微信扫一扫

栈之基础题目

点亮自己的那盏灯 2022-04-16 阅读 25
golang

文章目录

栈之基础题目

1.有效的括号

1.1栈

func isValid(s string) bool {
	if len(s)%2 == 1 {
		return false
	}
	stack := make([]byte, 0)

	for i := 0; i < len(s); i++ {

		if s[i] == '(' {
			stack = append(stack, ')')
		} else if s[i] == '[' {
			stack = append(stack, ']')
		} else if s[i] == '{' {
			stack = append(stack, '}')
		} else if len(stack) == 0 || stack[len(stack)-1] != s[i] {
			// 第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号 return false
			// 第二种情况:遍历字符串匹配的过程中,发现栈里没有我们要匹配的字符。所以return false
			return false
		} else {
			stack = stack[:len(stack)-1] // st.top() 与 s[i]相等,栈弹出元素
		}
	}
	// 第一种情况:此时我们已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false,否则就return true
	return len(stack) == 0
}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

20.有效的括号

image-20220109180230352
在这里插入图片描述

2.删除字符串中的所有相邻重复项

2.1栈

func removeDuplicates(s string) string {
    var stack []byte
    for i := 0; i < len(s);i++ {
        // 栈不空 且 与栈顶元素不等
        if len(stack) > 0 && stack[len(stack)-1] == s[i] {
            // 弹出栈顶元素 并 忽略当前元素(s[i])
            stack = stack[:len(stack)-1]
        }else{
            // 入栈
            stack = append(stack, s[i])
        }
    }
    return string(stack)
}

1047.删除字符串中的所有相邻重复项
image-20220202223423253

3.逆波兰表达式求值

3.1栈

func evalRPN(tokens []string) int {
	stack := []int{}
	for i := 0; i < len(tokens); i++ {
		if tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/" {
			num1, num2 := stack[len(stack)-2], stack[(len(stack))-1] //栈的倒数第一个元素与倒数第二个元素
			stack = stack[:len(stack)-2]                             //去掉栈的倒数第一个元素与倒数第二个元素
			switch tokens[i] {
			case "+":
				stack = append(stack, num1+num2)
			case "-":
				stack = append(stack, num1-num2)
			case "*":
				stack = append(stack, num1*num2)
			case "/":
				stack = append(stack, num1/num2)
			}
		} else {
			v, _ := strconv.Atoi(tokens[i])
			stack = append(stack, v)
		}
	}
	return stack[0] //最终栈只会有一个元素
}

150.逆波兰表达式求值
image-20220202224100752

image-20220202224111749

举报

相关推荐

0 条评论