首页 > 其他分享 >day9

day9

时间:2024-06-03 15:59:26浏览次数:25  
标签:return day9 res len item stack append

今天是day9:
题目一:
匹配括号:

class Solution:
    def isValid(self, s: str) -> bool:
        stack = []
        for item in s:
            if item == '(':
                stack.append(')')
            elif item == '[':
                stack.append(']')
            elif item == '{':
                stack.append('}')
            elif not stack or stack[-1] != item:
                return False
            else:
                stack.pop()
        return True if not stack else False
class Solution:
    def isValid(self, s: str) -> bool:
        stcak = []
        mapping = {
            '(':')',
            '[':']',
            '{':'}',
        }
        for item in s:
            "如果在key中就将将它追加到栈中"
            if item in mapping.keys():
                stcak.append(mapping[item])
            elif not stcak or stcak[-1] != item:
                return False
            else:
                //否则弹出
                stcak.pop()
        return True if not stcak else False
func isValid(s string) bool {
    //用切片模拟栈
     stack := make([]rune,0)
    
    //m用于记录某个右括号对应的左括号
     m:=make(map[rune]rune)
     m[')'] = '('
     m['}'] = '{'
     m[']'] = '['
     
     //遍历字符串中的rune
     for _,c := range s {
        //左括号直接入栈
        if c == '(' || c == '[' || c == '{' {
            stack = append(stack,c)
        } else {
            //如果右括号,先判断栈内是否还有元素
            if len(stack) == 0{
                return false
            }
            //再判断栈顶元素是否能匹配
            peek := stack[len(stack)-1]
            if peek != m[c] {
                return false
            } 
             //模拟栈顶弹出
            stack = stack[:len(stack)-1]

        }
     }
     //此时栈内无元素,即完全匹配
     return len(stack) == 0
}

题目二:删除字符串中的所有相邻重复项

class Solution:
    def removeDuplicates(self, s: str) -> str:
        res = list()
        for item in s:
            if res and res[-1] == item:
                res.pop()
            else:
                res.append(item)
        return "".join(res)
class Solution:
    def removeDuplicates(self, s: str) -> str:
        res = list(s)
        slow = fast = 0
        length = len(res)

        while fast < length:
            //如果一样直接替换,不一样会把后面的填在slow的位置
            res[slow] = res[fast]

            //如果发现和前一个一样,就退一格指针 
            if slow > 0 and res[slow] == res[slow - 1]:
                slow -=1
            else:
                slow+=1
            fast +=1
        return ''.join(res[0:slow])
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)

}

题目三:逆波兰表达式

from operator import add,sub,mul
class Solution:
    "从库中引用这些操作并通过map将其绑定在对应的字符上"
    op_map = {'+':add,'-':sub,'*':mul,'/':lambda x,y: int(x / y)}
    def evalRPN(self, tokens: List[str]) -> int:
        "声明一个空栈"
        stack = []
        "遍历并判断,并达到将满足这些运算符都加入到栈中的目的"
        for token in tokens:
            if token not in {'+','-','*','/'}:
                stack.append(int(token))
            else:
                "否则就弹出"
                op2 = stack.pop()
                op1 = stack.pop()
                "从 op_map 中获取相应的操作函数,并将栈顶的两个操作数传递给这个操作函数,执行相应的运算,并将结果压入栈中。"
                stack.append(self.op_map[token](op1,op2))
        return stack.pop()

class Solution:
    def evalRPN(self, tokens: List[str]) -> int:
        stack = []
        for item in tokens:
            if item not in {"+","-","*","/"}:
                stack.append(item)
            else:
                first_num,second_num = stack.pop(),stack.pop()
                stack.append(
                    "第一个出来的在运算符后面"
                    int(eval(f'{second_num} {item} {first_num}'))
                )
        "如果一开始只有一个数那么就是字符串形式的"
        return int(stack.pop())
func evalRPN(tokens []string) int {
    stack := []int{}
    for _,token := range tokens{
        //行代码将当前遍历到的 token 转换为整数 val。strconv.Atoi 函数用于将字符串转换为整数。如果转换成功,err 将为 nil,否则将是一个非 nil 的错误。
        val,err := strconv.Atoi(token)
        if err == nil {
            //如果当前 token 是一个操作数,将其压入栈中。
            stack = append(stack,val)
        }else{
            //否则从栈中取出栈顶的两个操作数,分别赋值给 num1 和 num2。
            num1,num2 := stack[len(stack) - 2],stack[len(stack) -1]
            //将栈顶的两个操作数从栈中移除,即将栈的长度减去 2。
            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)
                case "/":
                     stack = append(stack,num1/num2)
            }
        }
    }
        return stack[0]
}

标签:return,day9,res,len,item,stack,append
From: https://www.cnblogs.com/leisure535/p/18229034

相关文章

  • day9数据解析
    正则表达式:规则表达式,文本排列规则的表达式//独立的编程语言//把自己想输出的统一成一套规则1.【元字符】//通配符.字符集「」re.findall(正则模式,文本)基于正则模式查询所有匹配的文本内容ret1=refindall//通配符.除换行符以外都能匹配的字符集^//取反/d匹配成......
  • m1_day9
    课程内容:参数传递变量的共享方法封装的意义参数传递:Java中只有值传递Java中的基本数据类型传值引用数据类型传地址......
  • 机器学习和深度学习--李宏毅(笔记与个人理解)Day9
    Day9LogisticRegression(内涵,熵和交叉熵的详解)中间打了一天的gta5,图书馆闭馆正好+npy不舒服那天+天气不好,哈哈哈哈哈总之各种理由吧,导致昨天没弄起来,今天补更!这里重点注意一下,这个output值是概率哈,也就是说式子整体表示的含义是x属于c1的概率是多大这个老师......
  • day9 无序序列
    一、字典(dict)字典是一种无序的,可变的的序列,它的元素以键值对的形式存在,我们之前学的列表和元祖是有序的,在底层是紧挨一起存放的。 字典是唯一的映射类型,就是说通过一个元素可以找到另外一个元素,就像搜索引擎一样用正则表达式匹配关键字,进行搜索。1.1字典的创建键值......
  • 纯小白蓝桥杯备赛笔记--DAY9(搜索)
    文章目录三道例题学会DFS剪枝什么是剪枝数字王国之军训排队--2942特殊的三角形--3008特殊的多边形--3075DFS基础回溯简介回溯法模版例题N皇后--1508小朋友崇拜圈--182全球变暖--178记忆化搜索简介斐波那契数列混境之地5-3820地宫取宝-216三道例题学会DFS剪枝什......
  • 就业班 第二阶段 2401--3.29 day9 shell之正则+数组
    九、shell编程-数组普通数组:只能用整数作为数组的索引关联数组:可以使用字符串作为数组的索引数组定义普通数组定义:[root@newrainshell]#books=(linuxshellawksed) 引用:[root@newrainshell]#echo${books[0]}linux[root@newrainshell]#echo${books......
  • LeetCode刷题记录——day9
    https://leetcode.cn/problems/game-of-life/?envType=study-plan-v2&envId=2024-spring-sprint-100先创建一个数组,让它比原数组大一圈,然后将其全设为0,在原数组中每有一个1出现,就将其对应位置的新数组的周围全部加一,最后新数组中对应位置的数字就是其周围有多少个活细胞classSo......
  • Leetcode算法训练日记 | day9
    一、实现strStr函数1.题目Leetcode:第28题给你两个字符串haystack和needle,请你在haystack字符串中找出needle字符串的第一个匹配项的下标(下标从0开始)。如果needle不是haystack的一部分,则返回 -1。示例1:输入:haystack="sadbutsad",needle="sad"输......
  • day9 嵌套排序,利用嵌套循环所写的简单时钟
    #define_CRT_SECURE_NO_WARNINGS#include<stdio.h>//利用嵌套循环编写一个时间的函数#include<Windows.h>//利用windows的函数来定义时刻。intmain(){   for(inti=0;i<24;i++)//嵌套的本质是外层执行一次内层执行一周,内层如果再嵌套则此时的内层表示的是......
  • Android 开发Day9
    /***Automaticallygeneratedfile.DONOTMODIFY*/packagecom.hui.tally;publicfinalclassBuildConfig{publicstaticfinalbooleanDEBUG=Boolean.parseBoolean("true");publicstaticfinalStringAPPLICATION_ID="com.hui.tally......