Day10|● 20. 有效的括号 ● 1047. 删除字符串中的所有相邻重复项 ● 150. 逆波兰表达式求值

本文介绍了使用栈数据结构解决两个编程问题:检查一个字符串是否为有效的括号组合以及计算逆波兰表达式的值。在有效括号问题中,栈用于存储左括号,以便匹配右括号。在逆波兰表达式求值问题中,栈帮助管理数字和运算符,实现计算。注意到了Go语言中浮点数的pow函数在整数运算时需要转换类型。

20. 有效的括号

有效的括号
需要注意数值越界问题,比如一开始就出现个右括号

func isValid(s string) bool {
    stack := make([]byte,0)


    for i := 0; i < len(s); i++{
        if s[i] == '(' || s[i] == '[' || s[i] == '{'{
            stack = append(stack,s[i])
            continue
        }
        if s[i] == ')'{
            if len(stack) != 0 && stack[len(stack) - 1] == '('{
                stack = stack[:len(stack) - 1]
                continue
            }else{
                return false
            }
        }
        if s[i] == ']'{
            if len(stack) != 0 && stack[len(stack) - 1] == '['{
                stack = stack[:len(stack) - 1]
                continue
            }else{
                return false
            }
        }
        if s[i] == '}'{
            if len(stack) != 0 && stack[len(stack) - 1] == '{'{
                stack = stack[:len(stack) - 1]
                continue
            }else{
                return false
            }
        }
    }
    if len(stack) != 0 {
        return false
    }
    return true
}

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

删除字符串中的所有相邻重复项
利用栈进行比较即可

150. 逆波兰表达式求值

逆波兰表达式求值
思路简单,但是go的pow居然是float64类型,所以需要进行数值转换才可以

func evalRPN(tokens []string) int {
    
    stcak := make([]int, 0)
    for i := 0; i < len(tokens); i++{
        if tokens[i] != "+" && tokens[i] != "-" && tokens[i] != "*" && tokens[i] != "/"{
            stcak = append(stcak, String2int(tokens[i]))
        }else{
            right := stcak[len(stcak) - 1]
            left := stcak[len(stcak) - 2]
            stcak = stcak[: len(stcak) - 2]
            stcak = append(stcak,operater(left, right,tokens[i]))
        }
    }
    return stcak[0]
    
    //return String2int("-11")
}

func operater( left,  right int, fun string) int{
    x := 0
    switch fun{
        case "+" : x = left + right
        case "-" : x = left - right
        case "*" : x = left * right
        case "/" : x = left / right 
    }
    return x
}
func String2int(str string) int{
    sum := 0
    c := 0
    for i := 0 ; i < len(str); i++{
        if str[i] == '-'{
            c = 1
            continue 
        }
        sum += int(str[i] - '0') * int(math.Pow(10.0,float64(len(str) - i - 1)))
    }
    if c == 1{
        sum *= -1
    }
    return sum
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值